我是 python 的新手,我发现“即使函数也是对象”这件事真的很酷,所以我只是在玩 PyShell 中的函数。以下代码运行良好。
def add_num(a,b):
c = a + b
return c
x = add_num
x(5,2)
我想知道当我们赋值 x = add_num 时是否可以存储参数。因此,每当我们调用 x() 时,它都会添加 a 和 b(此处为 5 和 2)并返回结果。 x = add_num(5,2) 将不起作用,因为 add_num(5,2) 实际上调用该函数并返回 7。
最佳答案
functools
模块 ( documentation ) 中的 partial
函数可以创建一个行为如您所愿的新函数对象。
import functools
def add_num(a, b):
c = a + b
return c
x = functools.partial(add_num, 5, 2)
print(x()) # prints 7
您也可以只指定一个参数,并在调用“部分”函数时提供另一个参数:
y = functools.partial(add_num, 5)
print(y(6)) # prints 11
它也适用于关键字参数:
z = functools.partial(add_num, b=5)
print(z(10)) # prints 15
正如评论中所建议的,另一种选择是使用 lambda
表达式 ( documentation ),这只是创建新函数的简写。
f = lambda: add_num(25, 30)
print(f()) # prints 55
# the lambda definition is equivilent to
def f():
return add_num(25, 30)
也可以像您在问题中显示的那样修改原始函数,但在大多数情况下,这将被认为是糟糕的风格。如果你真的想这样做,你可以通过将参数添加为函数对象的 .func_defaults
属性来实现(在旧版本的 Python 中称为 .__defaults__
;documentation ).
add_num.func_defaults = (1, 2)
print(add_num()) # prints 3
关于python - 如何将参数与函数对象相关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5348491/