将函数分配给变量

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() 将调用函数的结果分配给yy = 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。

【讨论】:

以上是关于将函数分配给变量的主要内容,如果未能解决你的问题,请参考以下文章

将JavaScript函数分配给变量的效果[重复]

将递归函数分配给python中的变量

将函数分配给R中的变量

Python - GUI复选框无法将带有参数的函数分配给变量

React Error - 在导出为模块之前将箭头函数分配给变量和

将 Future 类型化结果从函数分配给 Flutter Widget 中的变量