将函数赋值给变量

84

假设我有一个函数:

def x():
    print(20)

现在我想将这个函数赋值给一个名为y的变量,这样如果我使用y,它会再次调用函数x。如果我简单地进行赋值y = x(),它将返回None


3
我已经编辑了你的问题,只保留了相关信息。你的热情很棒,但是请在以后专注于解释你真正的问题。 - Li-aung Yip
1
我也进行了编辑,因为你想要做的是“将函数分配给变量”,而不是“将变量分配给函数”。 - Gareth Latty
我认为 lambda 应该可以工作,请查看下面的答案。 - Pengju Zhao
7个回答

134

你只需不调用该函数。

>>> def x():
>>>     print(20)
>>> y = x
>>> y()
20

方括号告诉Python你正在调用函数,所以当你把它们放在那里时,它会调用该函数并将y赋值为x返回的值(在这种情况下是None)。


10
函数作为一等对象,哦耶 - Li-aung Yip
1
非常感谢。直到现在,我实际上还以为自己在Python方面还算不错呢 :D - stensootla
7
值得注意的是,任何对象都可以被制作成“可调用”的,就像函数一样。你只需要定义该对象的__call__()方法即可。 - Li-aung Yip
2
@semjaavria 当然,方法的工作方式是相同的 - 试一下吧。 - Gareth Latty
2
@seeker x() 明确地调用函数。 x 是一个返回函数 x 的表达式。 x() 是返回调用函数 x 的结果的表达式。 y = x() 将函数调用的结果分配给 yy = x 将函数赋值给 y。它出现在赋值中并不意味着 x() 有不同的含义。 - Gareth Latty
显示剩余13条评论

17
当你将函数赋值给变量时,你不需要使用()而只需使用函数的名称。
在您的情况下,假设有一个def x(): ...的函数以及一个名为silly_var的变量,您需要像这样执行操作:
silly_var = x

然后你可以通过以下方式调用该函数

x()
或者
silly_var()

12

当你执行 y=x() 时,实际上是将变量 y 赋值为调用函数对象 x 的结果,并且该函数的返回值为 None。在Python中,函数调用使用括号 ()。要将 x 分配给 y,以便您可以像调用 x 一样调用 y,请将函数对象 x 分配给 y,如 y=x,然后使用 y() 调用函数。


10
语法
def x():
    print(20)

这基本上与x = lambda: print(20)相同(在幕后有一些差异,但对于大多数实际目的而言,结果是相同的)。

语法:

def y(t):
   return t**2

这基本上与 y= lambda t: t**2 相同。当您定义一个函数时,您正在创建一个变量,该变量的值为函数。在第一个示例中,您将 x 设置为函数 lambda: print(20)。因此,x 现在引用该函数。x() 不是函数,而是函数的调用。在 Python 中,函数只是一种变量类型,通常可以像其他变量一样使用。例如:

def power_function(power):
      return  lambda x : x**power
power_function(3)(2)

这将返回8。 power_function 是一个返回函数作为输出的函数。当它被调用时参数为 3,它会返回一个立方输入的函数,所以当那个函数带参数2被调用时,它返回 8。 你可以执行 cube = power_function(3),现在 cube(2) 将返回 8。


我正在寻找的是 x = lambda: print(20)。谢谢分享。 - Charlie 木匠

5

这种情况下,lambda表达式非常有用。

  1. 创建函数y=x+1 y=lambda x:x+1

  2. 调用函数 y(1) 然后返回2


这对于打印函数没有起作用。我试图将我的选择“日志记录”注入到自定义函数中。 - AnneTheAgile

0
def x():
   print(20)
   return 10

y = x
y()
print(y)

输出结果

20
<function x at 0x7fc548cd3040>

因此,它实际上没有将 x() 返回的值分配给变量 y。


0

我不知道重命名一个函数并使用新名称调用它的价值/有用性是什么。但是,将字符串用作函数名称,例如从命令行获取,具有一定的价值/有用性:

import sys
fun = eval(sys.argv[1])
fun()

在这种情况下,fun = x。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接