for / while / print *的东西如何在python中运行?

时间:2013-07-27 19:15:37

标签: python loops for-loop syntax while-loop

我的意思是,如何定义语法,即如何制作我自己的结构?

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

但是使用python,程序员可以访问到目前为止所遇到的所有内容,所以你或多或少可以自由地做任何你想做的事情。

我如何编写自己的forwhile版本?它甚至可能吗?

我没有任何实际的申请,所以答案为什么?!问题只是“因为为什么不呢?”或“好奇心”。

4 个答案:

答案 0 :(得分:3)

不,你不能,不是来自Python内部。您无法为该语言添加新语法。 (您必须修改Python本身的源代码才能创建自己的Python自定义版本。)

请注意,iterator protocol允许您以自定义方式定义可与for一起使用的对象,其中包含编写自己的迭代语法的许多可能用例。

答案 1 :(得分:1)

你不能制作等效的结构。 forwhileif等等statements,并且它们使用自己的特定语法构建到语言中。有些语言允许这种事情(在某种程度上),例如Scala

答案 2 :(得分:1)

whileprintfor等是关键字。这意味着它们在读取代码时被python解析器解析,剥离任何冗余字符并产生令牌。然后,词法分析器将这些令牌作为输入并构建程序树,然后由解释器执行。这样说,这些结构仅用作底层词汇机制的语法糖,因此从代码内部看不到。

答案 3 :(得分:1)

嗯,您可以使用几种方法来创建自己的语法:

  1. 编写更高阶的函数,例如mapreduce

  2. 在C级修改python。正如您所料,这与其他许多语言相比,相对更容易。请参阅此文章以获取示例:http://eli.thegreenplace.net/2010/06/30/python-internals-adding-a-new-statement-to-python/

  3. 使用调试工具或编码工具伪造它。请参阅此代码:http://entrian.com/goto/download.htmlhttp://timhatch.com/projects/pybraces/

  4. 使用预处理器。这是一个试图让这一切变得简单的项目:http://www.fiber-space.de/langscape/doc/index.html

  5. 使用内置的python工具来实现类似的效果(装饰器,元类等)。

  6. 显然,这一切都不是你想要的,但是python,与smalltalk或lisp不同,不是(必然)编程本身,并保证在运行时公开自己的底层执行和解析机制。