有没有办法让用户定义的Python函数像内置语句一样?

时间:2009-01-28 21:43:59

标签: python

是否可以使用户定义的Python函数像声明一样?换句话说,我希望能够说:

myfunc

而不是:

myfunc()

然后让它被调用 - 比如print会这样。

我已经可以听到你们所有关于如何做这件事情的回应了,我很愚蠢地问它,为什么我要这样做而且我真的应该做别的事,但请接受我的话这是我需要做的事情来调试我遇到的问题,它不会被检查或用于空中交通管制系统。

7 个答案:

答案 0 :(得分:9)

不,这是不可能的。

Language Reference可以看出,规范中没有留下扩展简单陈述列表的空间。

此外,{3.0}中的print不再存在,并被print()内置函数替换。

答案 1 :(得分:3)

如果您要查找的是为Python语言添加新语句(如print),那么这并不容易。您可能必须修改lexer,解析器,然后重新编译Python的C源代码。为了方便起见,还有很多工作要做。

答案 2 :(得分:3)

我不会实现这个,但如果我实现这个,我会给myfunc一个特殊扩展的代码,编写一个导入钩子来解析文件,添加括号使其成为有效的Python,并将其提供给解释器

答案 3 :(得分:2)

如果你想传递参数,那就没有了。您可以做一些构建一个滥用__str__方法的对象,但强烈建议不要这样做。您还可以使用其他运算符,例如<<运算符,例如cout在C ++中的运算符。

答案 4 :(得分:1)

在Python 2.x中,print不是一个函数,它是一个语句,就像,while和def是语句一样。

答案 5 :(得分:1)

无法以有计划的方式或无需大量工作。

如果你大胆冒险,请阅读这篇关于元循环评估的维基百科文章。 Python对自己的编译器/评估器对象有很好的检查和反思,你可以沿着这些行拼凑一些东西。

  

“”“元循环实现适合扩展语言   它们都是用来编写的。它们对于编写工具也很有用   与编程语言紧密集成,例如   复杂的调试器。一种用元循环设计的语言   实现时通常更适合构建语言   一般情况下,甚至与主语言完全不同。“”“

我相信pypy正在做类似的事情,你可能想要调查一下。

答案 6 :(得分:0)

这可能不会解决你的问题,但无论如何我都会提到它。如果myfunc是模块的一部分,并且您正在使用它:

from mymodule import myfunc
myfunc # I want this to turn into a function call

然后你可以这样做:

import mymodule
mymodule.myfunc # I want this to turn into a function call

然后,您可以从myfunc中移除mymodule并重载模块,以便每次请求myfunc成员时调用特定函数。