如何将一个函数赋值给一个变量但不运行它?

4
无论何时我将一个变量分配给一个函数,它都会运行该函数。因此,如果在函数中有一个打印语句,那么即使我只想分配而不运行函数,它也会打印文本。我不相信这在许多其他编程语言(如C++)中是这样的,所以这里是否有我缺失的核心概念?
def function(x):
    print("Text From Function")
    return 3*x

y = function(2)

我期望没有输出,但实际输出是: 来自函数的文本


4
y = 函数。如果你加上括号,就调用/运行了它。 - Paritosh Singh
明白了,那很有道理。在这种情况下,如果我想调用函数并且需要定义一个x的值,我应该像这样做y(这里填入某个值),对吗? - Loop
1
@Loop 为什么不试着运行它呢?(答案是肯定的) - Paritosh Singh
在Python中,函数是对象。在这种情况下,“function”已经是一个“名称”(在某种意义上是变量)来表示函数所做的事情。将“y = function”赋值是正确的方法。但实际上,这只是将“function”与“y”设置为别名。 - brentertainer
1
是的,但不完全是直接的。这是一个叫做部分函数的概念。本质上,您定义了一个不同的函数作为包装器,围绕着这个函数,已经准备好了一个参数。 - Paritosh Singh
显示剩余5条评论
3个回答

5
如果你有函数a并且想把它赋值给变量y,只需执行以下操作:
def a():
  print("hello")
y = a
y()

在这种情况下,运行y()会打印出"hello"。如果在函数后面加上括号,它会调用并返回函数的返回值,而不是函数本身。

3

根据@ParitoshSingh,@LiranFunaro和@TrevinAvery的评论,您可以使用lambda或functools.partial为带有预填参数的函数赋予新名称。

import functools

def function(x):
    print("Text From Function")
    return 3*x

y1 = lambda: function(2)
y2 = functools.partial(function, 2)

然后使用y1()y2()调用它们。


1
这是因为函数的存在使得你不需要一遍又一遍地重写相同的代码,所以当你在编写以下代码时:
function(2)

它执行了编写在HTML中的整个代码。
def function(x):

这段内容涉及打印文本。
如果您想将该函数分配给一个变量,您需要编写:
y = function

不加括号 你将能够做到

result = y(2)

然而,如果print()函数在你的函数定义中,你不能分配函数返回的值而不打印文本。如果你想获得返回的值而不打印文本,你需要在函数定义代码中摆脱print()函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接