我是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.
答案 0 :(得分:5)
partial
模块中的functools
函数(documentation)可以创建一个符合您需要的新功能对象。
import functools
def add_num(a, b):
c = a + b
return c
x = functools.partial(add_num, 5, 2)
print(x()) # prints 7
您也可以只指定一个参数,并在调用“partial”函数时提供另一个参数:
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
答案 1 :(得分:1)
import functools
x = functools.partial(add_num, 5, 2)
print x()
答案 2 :(得分:1)
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()
打印:
<function add at 0x1004d4398>
6
9
答案 3 :(得分:0)
import functools
addnum = lambda x,y:x+y
print addnum(5,2) #print 7
z = functools.partial(addnum,5,2)
print z() #print 7