变量设置为调用函数

时间:2015-06-19 20:45:28

标签: python

我希望这个问题看起来不太天真或愚蠢,但我希望得到明确答案作为确认。

是否可以设置变量来调用函数?

def func():
    print "test"

var = [something magical + func]

然后,如果您输入var,则会输出test

换句话说,如果它在Python中从不需要(或接受)参数,是否有另一种方法来调用函数而不使用括号?

我认为这是不可能的,因为你总是需要使用"()"调用函数,但我很好奇是否有任何异常?

4 个答案:

答案 0 :(得分:3)

一般来说,没有。除了评论中提到的properties之外,您始终需要应用参数列表(即使它是空的())来实际调用该函数。否则,您不是调用该函数,而是将函数本身作为值引用。

您可以在Python的命令行解释器上轻松复制它:

>>> def func():
...     return "foo"
... 
>>> func() # Actually call the function; statement returns the function's return value
'foo'
>>> func # Reference the function as value; statement returns *the function itself*
<function func at 0x7f2c7a65b938>

>>> var = func # Assign the function value to another variable
>>> var # Now "var" references the same function as "func"...
<function func at 0x7f2c7a65b938>
>>> var() # ...and can also be called as a function
'foo'
>>> 

答案 1 :(得分:2)

你是在思考它:

def func():
    print "test"

var = func
var() # calls func()

在python中,函数是对象,因此您可以将var分配给函数func,现在它是对func的引用。您还可以将变量分配给类定义,因为它们也是对象:

class A(object):
    def __init__(self):
        self.data = 1

B = A # B is the same class type as A
myA = B() # constructs an A
print(myA.data) # prints "1"

答案 2 :(得分:1)

@property装饰器允许您将方法伪装成普通属性。这对于应该是计算值的事物是有用的,例如,倒数计时器剩余的时间。这确保了每次引用该变量时动态更新的值,因为它实际上是一个方法调用。

>>> class O(object):
...     def __init__(self):
...             self.x = 0
...     @property
...     def x_is_negative(self):
...             return self.x < 0
...
>>> a = O()
>>> a.x_is_negative
False
>>> a.x = -1
>>> a.x_is_negative
True

答案 3 :(得分:1)

对于命令行使用,还有另一个技巧:__repr__。 我用它只用一个字符来调用一个函数。

假设您要致电f()

>>> class OneCharFunc(object):
...   def __repr__(self):
...     f()
...     return ''
...
>>> n=OneCharFunc()
>>> n