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

时间:2011-03-18 05:38:37

标签: python function object

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

4 个答案:

答案 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