是否可以使用户定义的Python函数像声明一样?换句话说,我希望能够说:
myfunc
而不是:
myfunc()
然后让它被调用 - 比如print
会这样。
我已经可以听到你们所有关于如何做这件事情的回应了,我很愚蠢地问它,为什么我要这样做而且我真的应该做别的事,但请接受我的话这是我需要做的事情来调试我遇到的问题,它不会被检查或用于空中交通管制系统。
答案 0 :(得分:9)
答案 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
成员时调用特定函数。