![](/img/trans.png)
[英]In Python, make a variable act like a function, call a function without parentheses, alias a function as a variable, etc?
[英]call function through variable or without parentheses in python
我想创建一个别名来调用没有括号的函数。 就像是:
>ls=os.getcwd()
>ls
>"/path1"
>os.chdir("/path2")
>ls
>"/path1" ( the wanted output would be "/path2" )
实际上,“ ls”总是具有相同的值,即在确定时刻的值。
我当然可以:
>ls=os.getcwd
然后与
>ls()
但是我想要的是不带括号的调用函数(当然,当函数不需要参数时)
我试过了
>def ListDir():
> print(os.getcwd())
>
>ls=ListDir()
但是不行。 我该怎么做? 这是可能的? (只有容易做到)
Python希望您保持露骨; 如果要重新计算表达式, 则必须调用它。 但是,如果您真的希望它可以在Python交互式解释器中工作,则必须对其进行破解。
您仅回显变量 ,而不执行表达式。 该变量不会因为您要求交互式解释器回显而改变。
也就是说,除非您迷上了回声机制。 您可以通过重写__repr__
方法来实现 :
class EvaluatingName(object):
def __init__(self, callable):
self._callable = callable
def __call__(self):
return self._callable()
def __repr__(self):
return repr(self())
ls = EvaluatingName(os.getcwd)
演示:
>>> import os
>>> class EvaluatingName(object):
... def __init__(self, callable):
... self._callable = callable
... def __call__(self):
... return self._callable()
... def __repr__(self):
... return repr(self())
...
>>> ls = EvaluatingName(os.getcwd)
>>> os.chdir('/')
>>> ls
'/'
>>> os.chdir('/tmp')
>>> ls
'/private/tmp'
现在这行得通,因为每次表达式生成除None
其他值时,都会回显该值,并且回显会在对象上调用repr()
。
请注意,这在交互式解释器或打印之外将不起作用 。 在其他情况下(例如脚本),您可能每次必须将对象转换为字符串。 例如,您不能将其用作需要字符串的函数的参数。
这将起作用:
os.path.join(ls(), 'foo.txt') # produce the value first
但这不会 :
os.path.join(ls, 'foo.txt') # throws an AttributeError.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.