Python 将函数赋值给变量
假设我有一个函数Python 将函数赋值给变量,python,Python,假设我有一个函数 def x(): print(20) 现在,我想将函数赋给一个名为y的变量,这样,如果我使用y它会再次调用函数x。如果我简单地执行赋值y=x(),它将返回None,而不调用函数 >>>def x(): >>> print(20) >>>y = x >>>y() 20 括号告诉python您正在调用函数,因此当您将它们放在括号中时,它将调用函数并分配y由x返回的值(在本例中为None)。将函
def x():
print(20)
现在,我想将函数赋给一个名为
y
的变量,这样,如果我使用y
它会再次调用函数x
。如果我简单地执行赋值y=x()
,它将返回None
,而不调用函数
>>>def x():
>>> print(20)
>>>y = x
>>>y()
20
括号告诉python您正在调用函数,因此当您将它们放在括号中时,它将调用函数并分配
y
由x
返回的值(在本例中为None
)。将函数分配给变量时,不使用()而只使用函数名
>>>def x():
>>> print(20)
>>>y = x
>>>y()
20
在给定defx():…
和变量silly\u var
的情况下,您将执行以下操作:
silly_var = x
然后你可以用
x()
或
执行
y=x()
时,实际上是在为调用函数对象x
的结果赋值y,函数的返回值为None
。python中的函数调用是使用()
执行的。若要将x分配给y
,以便可以调用y
,就像调用x
一样,将函数对象x分配给y,就像y=x
一样,并使用y()调用函数,lambda在这种情况下应该很有用。
比如说,
创建函数y=x+1
y=λx:x+1
调用函数
y(1)
然后返回2
语法
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)
这返回8power\u function
是一个返回函数作为输出的函数。当在3
上调用该函数时,它返回一个对输入进行立方运算的函数,因此当在输入2
上调用该函数时,它返回8。您可以执行cube=power\u函数(3)
,现在cube(2)
将返回8。我不知道重命名函数并使用新名称调用它的价值/用处是什么。但是使用字符串作为函数名(例如从命令行获得的)具有一些价值/有用性:
import sys
fun = eval(sys.argv[1])
fun()
在本例中,fun=x.作为一级对象运行,哦,是的。非常感谢。直到现在,我还是觉得自己在Python方面相当不错:D@geekkid:值得注意的是,任何对象都可以像函数一样“可调用”。您所要做的就是定义对象的\uuuu call\uuuu()
方法。@semjaavria当然,方法的工作方式是相同的-试试看。@seekx()
正在显式调用函数x
是一个返回函数x
的表达式x()
是一个表达式,返回调用函数x
的结果y=x()
将调用函数的结果分配给y
,y=x
将函数分配给y
。它出现在作业中的事实并不意味着x()
意味着一件不同的事情。我已经编辑了你的问题,将其缩减到最简单的部分。你的热情很高,但以后请专注于解释你的实际问题。我也编辑了一下,因为你想在这里做的是给一个变量分配一个函数,而不是给一个函数分配一个变量。我认为lambda
应该行得通,请。检查下面我的答案。这对打印功能不起作用。我试图将我选择的“日志记录”注入到自定义函数中。