如何使 timeit.Timer() 与 itertools.starmap() 的输出一起工作
How to make timeit.Timer() work with output of itertools.starmap()
我很难思考
为什么我可以让 timeit.Timer()
使用来自的输出
functools.partial()
但不是 itertools.starmap()
.
的输出
我基本上需要的是 starmap(func, tuples)
与 partial(func, one_arg_only)
具有相同的 'attributes'
但更一般地说,我实际上可以同时将多个参数传递给 func。
这里最简单的解决方法是什么?
我尝试了 timeit.Timer(starmap(func,tuples))
并且显然得到了臭名昭著的错误:
ValueError: stmt is neither a string nor callable
我想这是因为 starmap 的输出不可调用。但我该如何解决这个问题?
itertools.starmap()
函数returns一个itertools.starmap
iterable类型而functools.partial()
returns一个functools.partial
可调用类型。 timeit.Timer()
期望第一个参数是 callable
(或者它可以 exec()
的字符串)。
>>> type(itertools.starmap(lambda *args: list(args), [(1, 2)])
itertools.starmap
>>> type(functools.partial(lambda x: x+1, 1))
functools.partial
你想要做的是创建一个可调用对象,它将耗尽 itertools.starmap
返回的可迭代对象。一种方法是在星图的输出上调用 list()
函数:
# This is the function to call
>>> example_func = lambda *args: len(args)
# This is the iterable that can call the example_func
>>> func_callers = itertools.starmap(example_func, [(1, 2)])
# This is the callable that actually processes func_callers
>>> execute_callers = lambda: list(func_callers)
# And finally using the timer
>>> timeit.Timer(execute_callers)
我很难思考
为什么我可以让 timeit.Timer()
使用来自的输出
functools.partial()
但不是 itertools.starmap()
.
我基本上需要的是 starmap(func, tuples)
与 partial(func, one_arg_only)
具有相同的 'attributes'
但更一般地说,我实际上可以同时将多个参数传递给 func。
这里最简单的解决方法是什么?
我尝试了 timeit.Timer(starmap(func,tuples))
并且显然得到了臭名昭著的错误:
ValueError: stmt is neither a string nor callable
我想这是因为 starmap 的输出不可调用。但我该如何解决这个问题?
itertools.starmap()
函数returns一个itertools.starmap
iterable类型而functools.partial()
returns一个functools.partial
可调用类型。 timeit.Timer()
期望第一个参数是 callable
(或者它可以 exec()
的字符串)。
>>> type(itertools.starmap(lambda *args: list(args), [(1, 2)])
itertools.starmap
>>> type(functools.partial(lambda x: x+1, 1))
functools.partial
你想要做的是创建一个可调用对象,它将耗尽 itertools.starmap
返回的可迭代对象。一种方法是在星图的输出上调用 list()
函数:
# This is the function to call
>>> example_func = lambda *args: len(args)
# This is the iterable that can call the example_func
>>> func_callers = itertools.starmap(example_func, [(1, 2)])
# This is the callable that actually processes func_callers
>>> execute_callers = lambda: list(func_callers)
# And finally using the timer
>>> timeit.Timer(execute_callers)