在没有括号的情况下定义功能?

v92*_*23z 11 python function definition

我明白我的问题可能听起来很愚蠢,并且语言定义中可能有某些内容明确禁止这一概念,但由于我不知道这个禁令,我想知道是否有人可以对此有所了解.简而言之,我想定义一个我可以从python shell调用的python函数,但我想避免使用括号.有些情况下函数不需要参数,然后括号似乎只表示我们正在处理函数.如果想要打印当前工作目录,这样的例子就是.我可以将函数定义为

def pwd():
    print os.getcwd()
Run Code Online (Sandbox Code Playgroud)

然后我可以从shell调用它

pwd()
Run Code Online (Sandbox Code Playgroud)

但是,如果我想拥有一个我可以称之为的功能,该怎么办?

pwd
Run Code Online (Sandbox Code Playgroud)

这有可能吗?

Kir*_*ser 10

你会在那里得到一些语法.你可以尝试类似的东西:

import os
class Shell(object):
    @property
    def pwd(self):
        print os.getcwd()
Run Code Online (Sandbox Code Playgroud)

然后在你的翻译中,运行:

>>> s = Shell()
>>> s.pwd
/tmp
Run Code Online (Sandbox Code Playgroud)


meg*_*ord 10

如果不修改语言或shell,则无法执行此操作.

如果你想使用Python作为shell,你应该尝试IPython,它允许你定义你可以使用的宏,而无需键入任意数量的键.它也允许你这样做!pwd,你也可以将它分配给变量x = !pwd.它甚至可以让你通过写f x而不是调用单个参数函数f(x).

BTW Haskell是一种使用空格作为参数列表的语言,即:f(1,2,3)在Python中将f 1 2 3在Haskell中,在shell中,任何IO动作都可以通过输入来执行action.

我忘了还有一个你可以做的黑客:

class Pwd(object):
    def __repr__(self):
        # do pwd command
        # return result in string form
pwd = Pwd()
Run Code Online (Sandbox Code Playgroud)

现在,当您在shell中键入pwd时,它将调用__repr__以获取该对象的字符串表示形式.不幸的是,你只能返回一个字符串(相反,如果你正在实现ls,表示当前目录中文件/文件夹的字符串列表),因为python语言会强制这样做.