我的意思是,如何定义语法,即如何制作我自己的结构?
我在很多语言中都意识到,这样的东西会内置到编译器/规范中,所以它由编译器处理(至少我理解它是如何工作的)。
但是使用python,程序员可以访问到目前为止所遇到的所有内容,所以你或多或少可以自由地做任何你想做的事情。
我如何编写自己的for
或while
版本?它甚至可能吗?
我没有任何实际的申请,所以答案为什么?!问题只是“因为为什么不呢?”或“好奇心”。
答案 0 :(得分:3)
不,你不能,不是来自Python内部。您无法为该语言添加新语法。 (您必须修改Python本身的源代码才能创建自己的Python自定义版本。)
请注意,iterator protocol允许您以自定义方式定义可与for
一起使用的对象,其中包含编写自己的迭代语法的许多可能用例。
答案 1 :(得分:1)
你不能制作等效的结构。 for
,while
,if
等等statements,并且它们使用自己的特定语法构建到语言中。有些语言做允许这种事情(在某种程度上),例如Scala。
答案 2 :(得分:1)
while
,print
,for
等是关键字。这意味着它们在读取代码时被python解析器解析,剥离任何冗余字符并产生令牌。然后,词法分析器将这些令牌作为输入并构建程序树,然后由解释器执行。这样说,这些结构仅用作底层词汇机制的语法糖,因此从代码内部看不到。
答案 3 :(得分:1)
嗯,您可以使用几种方法来创建自己的语法:
编写更高阶的函数,例如map
或reduce
。
在C级修改python。正如您所料,这与其他许多语言相比,相对更容易。请参阅此文章以获取示例:http://eli.thegreenplace.net/2010/06/30/python-internals-adding-a-new-statement-to-python/
使用调试工具或编码工具伪造它。请参阅此代码:http://entrian.com/goto/download.html和http://timhatch.com/projects/pybraces/
使用预处理器。这是一个试图让这一切变得简单的项目:http://www.fiber-space.de/langscape/doc/index.html
使用内置的python工具来实现类似的效果(装饰器,元类等)。
显然,这一切都不是你想要的,但是python,与smalltalk或lisp不同,不是(必然)编程本身,并保证在运行时公开自己的底层执行和解析机制。