Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法让用户定义的Python函数像内置语句一样工作?_Python - Fatal编程技术网

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

有没有办法让用户定义的Python函数像内置语句一样工作?,python,Python,可以让用户定义的Python函数像语句一样工作吗?换句话说,我想说: myfunc 而不是: myfunc() 不管怎么说,它都会被调用,比如说,print 我已经听到你们都在写关于这是一件多么可怕的事情的回答,我问这个问题很愚蠢,为什么我想这样做,我真的应该做其他的事情,但是请相信我的话,这是我需要做的事情来调试我遇到的问题,它不会被检入或使用,比如,空中交通管制系统。不,这是不可能的 从中可以看到,规范中的简单语句列表没有扩展的余地 此外,print作为语句在Python 3.0中不再存

可以让用户定义的Python函数像语句一样工作吗?换句话说,我想说:

myfunc
而不是:

myfunc()
不管怎么说,它都会被调用,比如说,
print


我已经听到你们都在写关于这是一件多么可怕的事情的回答,我问这个问题很愚蠢,为什么我想这样做,我真的应该做其他的事情,但是请相信我的话,这是我需要做的事情来调试我遇到的问题,它不会被检入或使用,比如,空中交通管制系统。

不,这是不可能的

从中可以看到,规范中的简单语句列表没有扩展的余地


此外,
print
作为语句在Python 3.0中不再存在,并被
print()
内置函数所取代。

不,这是不可能的

从中可以看到,规范中的简单语句列表没有扩展的余地


此外,
print
作为一条语句在Python 3.0中不再存在,而是被
print()
内置函数所取代。

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

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

如果要传入参数,则不需要。您可以做一些事情来构建一个滥用
\uuu str\uuu
方法的对象,但强烈建议不要这样做。如果要传入参数,还可以使用其他运算符,如重载
Not。您可以做一些事情来构建一个滥用
\uuu str\uuu
方法的对象,但强烈建议不要这样做。您还可以使用其他操作符,如重载Python 2.x中的
print不是一个函数,它是一个语句,就像while和def是语句一样。

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

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

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

这可能不会解决您的问题,但我还是要提到它。如果
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

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

这可能不会解决您的问题,但我还是要提到它。如果
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

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

不可能以计划的方式进行,或者不需要大量工作

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

“”“元循环实现适合于扩展该语言 它们是用英文写的,对于编写 与编程语言紧密集成,例如 复杂的调试器。一种用元循环设计的语言 心中的实现通常更适合于在中构建语言 一般来说,即使是与宿主语言完全不同的语言

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


    • 不可能有计划地进行,或者没有大量工作

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

      “”“元循环实现适合于扩展该语言 它们是用英文写的,对于编写 与编程语言紧密集成,例如 复杂的调试器。一种用元循环设计的语言 心中的实现通常更适合于在中构建语言 一般来说,即使是与宿主语言完全不同的语言

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


      我很好奇,在什么情况下可能需要您这样做?为什么不向我们展示您必须调试的内容,我们将向您展示如何在不创建语句的情况下进行调试。Python只有20条左右的语句(如print),您是否试图在调试过程中替换这20条语句中的一条?如果是,哪一个。你有什么具体问题?我对此也很好奇。我不认为那样的言论是可憎的;我只是想不出myfunc()在任何情况下都不会做完全相同的事情。你能解决这些问题吗