繁体   English   中英

通过变量或不带括号在python中调用函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM