如何通过Python在其他函数中用参数调用一个函数?
我知道标题有点混乱。如何通过Python在其他函数中用参数调用一个函数?
因此,让我借此代码为例:
import timeit
def test1(x,y):
return x*y
def time_cost(func):
start = timeit.default_timer()
func()
stop = timeit.default_timer()
print(stop - start)
time_cost(test1)
我想给test1的两大参数,x和y,以time_cost功能。
但我不知道该怎么做。
我曾尝试在此之前:
import timeit
def test1(x,y):
return x*y
def time_cost(func):
start = timeit.default_timer()
func
stop = timeit.default_timer()
print(stop - start)
time_cost(test1(1,2))
它可以运行,但结果是如此怪异,我认为这是错误的。
那么如何做到这一点?谢谢你们。
返回一个你想要的功能。
def time_cost(func):
def run(*args, **kwargs):
start = timeit.default_timer()
func(*args, **kwargs)
stop = timeit.default_timer()
print(stop - start)
return run
然后调用它。
time_cost(test1)(1, 2)
你的回答非常好!谢谢! –
试试这个。
from functools import wraps
import timeit
def time_cost(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = timeit.default_timer()
result = func(*args, **kwargs)
stop = timeit.default_timer()
print(stop - start)
return result
return wrapper
test1 = time_cost(test1)
test1(1,2)
这种函数被称为装饰器。也称为包装,或封闭。
您还可以使用修饰语法使用:
@time_cost
def test1(x,y):
return x*y
test1(1,2)
这并不与上面相同的代码。
你的方法似乎有点神秘。无论如何,我非常感谢您的帮助! –
@MarsLee这实际上可能是在Python中完成这种事情的首选方法。这与IVA的第一个答案完全相同,我只是略微不同地使用它。请参阅:https://www.python.org/dev/peps/pep-0318/#abstract –
如果只接受一个参数('func'),则不能将'x'和'y'作为'time_cost'的参数。如果你想'time_cost'接受其他参数,那么你需要重写它,以便它接受其他参数。 – BrenBarn
你会想要阅读条款:闭包,装饰,包装。其基本思想是用一个新的函数替换(“包装”)你的函数,这个函数可以做你想做的事情,并以你想要的方式处理参数。 –