Skip to main content
 首页 » 编程设计

python之如何将参数与函数对象相关联

2025年05月04日14JustinYoung

我是 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