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

1 python function object

我是python的新手,我发现"偶数函数是对象"的东西非常酷,所以我只是在PyShell中使用函数.以下代码工作正常.

def add_num(a,b):
  c = a + b
  return c

x = add_num
x(5,2)
Run Code Online (Sandbox Code Playgroud)

我想知道在分配x = add_num时是否可以存储参数.因此,无论何时调用x(),它都会添加a和b(此处为5和2)并返回结果.x = add_num(5,2)将不起作用,因为add_num(5,2)实际调用该函数并返回7.

小智 5

partial该在功能functools模块(文件)可以创建一个新的函数对象行为像你想要的.

import functools

def add_num(a, b):
    c = a + b
    return c

x = functools.partial(add_num, 5, 2)
print(x()) # prints 7
Run Code Online (Sandbox Code Playgroud)

您也可以只指定一个参数,并在调用"partial"函数时提供另一个参数:

y = functools.partial(add_num, 5)
print(y(6)) # prints 11
Run Code Online (Sandbox Code Playgroud)

它也适用于关键字参数:

z = functools.partial(add_num, b=5)
print(z(10)) # prints 15
Run Code Online (Sandbox Code Playgroud)

正如评论中所建议的,另一种选择是使用lambda表达式(文档),这只是创建新函数的简写.

f = lambda: add_num(25, 30)
print(f()) # prints 55

# the lambda definition is equivilent to
def f():
    return add_num(25, 30)
Run Code Online (Sandbox Code Playgroud)

也有可能像你在问题中显示修改原有的功能,但在大多数情况下,这会被认为是不好的风格.如果你真的想要,可以通过添加参数作为.func_defaults函数对象的属性(.__defaults__在旧版本的Python中调用; 文档)来实现.

add_num.func_defaults = (1, 2)
print(add_num()) # prints 3
Run Code Online (Sandbox Code Playgroud)