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

2024-06-02 06:22:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 对象函数add参数returndefnum调用函数
3条回答
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()

印刷品:

^{pr2}$

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

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

^{pr2}$

它也适用于关键字参数:

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
import functools
x = functools.partial(add_num, 5, 2)
print x()

相关问题 更多 >