假设我有一个功能
def x():
print(20)
现在我想将函数分配给名为y
的变量,这样如果我使用y
,它会再次调用函数x
。如果我只是执行作业y = x()
,则会返回None
。
答案 0 :(得分:82)
您根本不会调用该函数。
>>>def x():
>>> print(20)
>>>y = x
>>>y()
20
括号告诉python您正在调用该函数,因此当您将它们放在那里时,它会调用该函数并通过y
将{{1>}值返回分配给x
在这种情况下是None
)。
答案 1 :(得分:11)
当你为一个变量分配一个函数时,不使用()而只是函数的名称。
在给定def x(): ...
和变量silly_var
的情况下,您可以执行以下操作:
silly_var = x
然后您可以使用
调用该函数x()
或
silly_var()
答案 2 :(得分:6)
执行y=x()
时,实际上是将y分配给调用函数对象x
的结果,函数的返回值为None
。 python中的函数调用是使用()
执行的。要分配x to y
,您可以像y
一样调用x
,将函数对象x分配给y,如y=x
,并使用y()
<调用函数/ p>
答案 3 :(得分:1)
语法
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()
不是函数,它是函数的 call 。在python中,函数只是变量的一种,通常可以像其他变量一样使用。例如:
def power_function(power):
return lambda x : x**power
power_function(3)(2)
这将返回8。power_function
是一个将函数作为输出返回的函数。在3
上调用它时,它返回一个对输入进行立方体处理的函数,因此在输入2
上调用那个函数时,它返回8。您可以执行{{ 1}},现在cube = power_function(3)
将返回8。
答案 4 :(得分:0)
我不知道重命名函数并用新名称调用它有什么价值/用处。但是使用字符串作为函数名称,例如从命令行获得的具有一些价值/有用性:
import sys
fun = eval(sys.argv[1])
fun()
在当前情况下,fun = x。
答案 5 :(得分:-1)
lambda应该对这种情况有用。 例如,
创建函数y = x + 1
y=lambda x:x+1
调用该函数
y(1)
然后返回2
。