Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
for/while/print*things*如何在python中工作?_Python_Loops_For Loop_Syntax_While Loop - Fatal编程技术网

for/while/print*things*如何在python中工作?

for/while/print*things*如何在python中工作?,python,loops,for-loop,syntax,while-loop,Python,Loops,For Loop,Syntax,While Loop,我的意思是,语法是如何定义的,也就是说,我怎样才能做出这样的构造 我意识到在很多语言中,类似这样的东西都会被内置到编译器/规范中,因此它由编译器处理(至少我理解它是如何工作的) 但是有了python,到目前为止我遇到的所有东西都是程序员可以访问的,因此您或多或少有做任何您想做的事情的自由 我将如何编写自己的版本,以或而?有可能吗 我没有任何实际的应用程序,所以答案是为什么?!问题只是“为什么不?”或“好奇”。不,你不能,不是从Python内部。无法向语言添加新语法。(您必须修改Python本身的

我的意思是,语法是如何定义的,也就是说,我怎样才能做出这样的构造

我意识到在很多语言中,类似这样的东西都会被内置到编译器/规范中,因此它由编译器处理(至少我理解它是如何工作的)

但是有了python,到目前为止我遇到的所有东西都是程序员可以访问的,因此您或多或少有做任何您想做的事情的自由

我将如何编写自己的
版本,以
?有可能吗


我没有任何实际的应用程序,所以答案是为什么?!问题只是“为什么不?”或“好奇”。不,你不能,不是从Python内部。无法向语言添加新语法。(您必须修改Python本身的源代码,以创建自己的自定义Python版本。)


请注意,允许您以自定义方式定义可与for一起使用的对象,这涵盖了编写自己的迭代语法的许多可能用例。

您不能创建等效的构造
for
while
if
等都是,它们以自己特定的语法内置到语言中。不过,有些语言(在某种程度上)确实允许这样做,例如。

while
print
for
等都是关键字。这意味着它们在读取代码时由python解析器解析,去掉任何冗余字符并生成标记。之后,lexer将这些令牌作为输入,并构建一个程序树,然后由解释器执行。话虽如此,这些结构仅用作底层词汇机器的语法糖,因此从代码内部看不到。

好吧,您有几个选项可以创建自己的语法:

  • 编写一个高阶函数,如
    map
    reduce

  • 在C级修改python。正如您所预料的,与摆弄许多其他语言相比,这是相对容易的。有关示例,请参阅本文:

  • 使用调试工具或编码工具伪造它。参见此代码:和

  • 使用预处理器。这里有一个项目试图简化这一过程:

  • 使用内置的python工具实现类似的效果(装饰器、元类等)


  • 显然,这些都不是您想要的,但是python与smalltalk或lisp不同,它本身(不一定)是编程的,并且保证在运行时公开它自己的底层执行和解析机制

    是的,我知道迭代器协议。所以你说的是流控制的语法,这些都是硬编码的,没有办法覆盖它(除了把
    python
    改成一些混蛋化)。所以你说的是,如果我写我自己的解析器,把它放在主语法的顶部,那么我可以解析我自己的代码,修改它,然后重新启动代码,并获得我想要的所有功能?(那是如果我有点疯狂的话)与疯狂无关。存在许多语言,第一步是将自定义源代码转换为可被另一个解析器/词法分析器/解释器/编译器理解的源代码,然后在目标运行时运行。是的,您可以编写自己的解析器,lexer和解释器,它们将由您自己的语法定义,然后生成python代码,这些代码将依次通过pythons机器运行,或者您可以直接输出可执行代码。如果您对编写简单的解释器感兴趣,请尝试bcnf converter工具——它能够在给定bcnf语法的情况下,用java/c++/haskell生成解析器和词法分析器。同样关于Python-函数有一个特殊的
    \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。你这个光荣的陌生人。
    goto
    项目太棒了。@will,不客气!下面是另一个劫持编码功能的项目: