将函数分配给变量
Posted
技术标签:
【中文标题】将函数分配给变量【英文标题】:Assigning a function to a variable 【发布时间】:2012-04-27 16:12:13 【问题描述】:假设我有一个函数
def x():
print(20)
现在我想将函数分配给一个名为y
的变量,这样如果我使用y
,它就会再次调用函数x
。如果我只是简单地分配y = x()
,它会返回None
。
【问题讨论】:
我已编辑您的问题,将其缩减为relevant information only.。您的热情很高,但以后请专注于解释您的实际问题。 我也进行了编辑,因为您要在这里做的是,而不是将变量分配给函数。跨度> 我认为lambda
应该可以,请。在下面检查我的答案。
【参考方案1】:
您根本不调用该函数。
>>>def x():
>>> print(20)
>>>y = x
>>>y()
20
括号告诉python你正在调用函数,所以当你把它们放在那里时,它会调用函数并将y
分配给x
的值返回(在这种情况下是None
)。
【讨论】:
函数作为一流的对象,哦耶。 非常感谢。直到现在,我实际上以某种方式认为我在 Python 中相当不错:D @geekkid:值得注意的是,any 对象可以像函数一样“可调用”。您所要做的就是定义对象的__call__()
方法。
@semjaavria 当然,方法的工作方式相同 - 试试吧。
@seeker x()
正在显式调用该函数。 x
是返回函数 x
的表达式。 x()
是一个表达式,它返回调用函数x
的结果。 y = x()
将调用函数的结果分配给y
,y = x
将函数分配给y
。它出现在作业中的事实并不意味着 x()
意味着不同的东西。【参考方案2】:
当您将函数分配给变量时,您不要使用 (),而只是使用函数的名称。
在给定def x(): ...
和变量silly_var
的情况下,您会执行以下操作:
silly_var = x
然后您可以使用
调用该函数x()
或
silly_var()
【讨论】:
【参考方案3】:当您执行y=x()
时,您实际上将y 分配给调用函数对象x
的结果,并且该函数的返回值为None
。 python 中的函数调用是使用()
执行的。要分配x to y
,这样您就可以像x
一样调用y
,您可以像y=x
一样将函数对象x 分配给y,并使用y()
调用函数
【讨论】:
【参考方案4】:语法
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
上调用时,它返回一个对输入进行立方处理的函数,因此当 that 函数在输入2
上调用时,它返回 8。你可以做cube = power_function(3)
,现在cube(2)
将返回 8。
【讨论】:
【参考方案5】:lambda 对于这种情况应该很有用。 例如,
创建函数 y=x+1
y=lambda x:x+1
调用函数
y(1)
然后返回2
。
【讨论】:
这不适用于打印功能。我试图将我选择的“日志记录”依赖注入到自定义函数中。【参考方案6】:我不知道重命名函数并用新名称调用它的价值/用途是什么。但是使用字符串作为函数名,例如从命令行获得,有一些价值/用处:
import sys
fun = eval(sys.argv[1])
fun()
在本例中,乐趣 = x。
【讨论】:
以上是关于将函数分配给变量的主要内容,如果未能解决你的问题,请参考以下文章
Python - GUI复选框无法将带有参数的函数分配给变量