我希望这个问题看起来不太天真或愚蠢,但我希望得到明确答案作为确认。
是否可以设置变量来调用函数?
即
def func():
print "test"
var = [something magical + func]
然后,如果您输入var
,则会输出test
?
换句话说,如果它在Python中从不需要(或接受)参数,是否有另一种方法来调用函数而不使用括号?
我认为这是不可能的,因为你总是需要使用"()"调用函数,但我很好奇是否有任何异常?
答案 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