2024-06-02 06:22:35 发布
网友
我是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。在
def gen_add(x, y): def add(): return x + y return add fn =gen_add(2,4) print fn print fn() fn1 = gen_add(5,4) print fn1()
印刷品:
functools模块(documentation)中的partial函数可以创建一个新的函数对象,其行为与您想要的一样。在
functools
partial
import functools def add_num(a, b): c = a + b return c x = functools.partial(add_num, 5, 2) print(x()) # prints 7
也可以只指定一个参数,并在调用“partial”函数时提供另一个参数:
它也适用于关键字参数:
z = functools.partial(add_num, b=5) print(z(10)) # prints 15
正如注释中所建议的,另一个选项是使用lambda表达式(documentation),这只是创建新函数的速记。在
lambda
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)来实现。在
.func_defaults
.__defaults__
add_num.func_defaults = (1, 2) print(add_num()) # prints 3
import functools x = functools.partial(add_num, 5, 2) print x()
印刷品:
^{pr2}$functools
模块(documentation)中的partial
函数可以创建一个新的函数对象,其行为与您想要的一样。在也可以只指定一个参数,并在调用“partial”函数时提供另一个参数:
^{pr2}$它也适用于关键字参数:
正如注释中所建议的,另一个选项是使用
lambda
表达式(documentation),这只是创建新函数的速记。在也可以像您在问题中显示的那样修改原始函数,但在大多数情况下,这将被视为不好的样式。如果您真的想这样做,可以通过添加参数作为函数对象的
.func_defaults
属性(在Python的旧版本中称为.__defaults__
;documentation)来实现。在相关问题 更多 >
编程相关推荐