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)
    

    这返回8
    power\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当然,方法的工作方式是相同的-试试看。@seek
    x()
    正在显式调用函数
    x
    是一个返回函数
    x
    的表达式
    x()
    是一个表达式,返回调用函数
    x
    的结果
    y=x()
    将调用函数的结果分配给
    y
    y=x
    将函数分配给
    y
    。它出现在作业中的事实并不意味着
    x()
    意味着一件不同的事情。我已经编辑了你的问题,将其缩减到最简单的部分。你的热情很高,但以后请专注于解释你的实际问题。我也编辑了一下,因为你想在这里做的是给一个变量分配一个函数,而不是给一个函数分配一个变量。我认为
    lambda
    应该行得通,请。检查下面我的答案。这对打印功能不起作用。我试图将我选择的“日志记录”注入到自定义函数中。