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

标签 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。

最佳答案

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

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

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

关于python - 如何将参数与函数对象相关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5348491/

相关文章:

python - 通过 __init__ 构造对象并忽略构造函数异常

javascript - 创建一个接受多个字符串参数并将它们全部打印在一起的函数

Jquery:以编程方式居中元素

javascript - 函数参数作为文本不起作用

JavaScript 对象对于所有版本的 Google Chrome 都是唯一的?

javascript - 使用 var 或不使用 var 定义对象

python - 如何在 python 中获取 pandas 的 x 和 y 值对

python - 如何 cPickle 转储并将单独的字典加载到同一个文件中?

python - Lasso 回归,所有系数均为 0

objective-c - 如何在 Objective-C 中使用运算符 < 或 > 比较对象?