将函数保存到这样的变量中很容易
pr = print
pr(5) # 5
但如果这可以在没有调用的情况下保存带有参数的函数,比如
some_var = defer print(5) # No call!
some_var() # 5
我尝试使用lambda,但它导致语法错误`l=lambda 5:
为什么我需要它?例如不重复多个";如果";分支:
示例:
def foo()
l1 = lambda: 1
l2 = lambda: 2
if 1:
func = l1
elif 2:
func = l2
else:
func = some_outer_func, some_inner_func
return func # To use "func" need additional "if" branches for type and length of a returned value
functools.partial
接受一个包含多个参数的函数,并返回一个包含较少参数的函数;保存";
from functools import partial
print_five = partial(print, 5)
print_five() # 5
它也适用于关键字参数
def foo(a, b=False):
print(a, b)
bar = partial(foo, b=True)
foo(1) # 1 False
bar(1) # 1 True
lambda的方式:
pr = lambda: print(5)
pr()