认真学过编译原理,写过编译器之后,再去学一门动态语言, 就老禁不住去想它语法特性是怎么实现的,我觉得想出这个问题不重要,重要的是你能想象到,动态语言的后端的数据结构要提前设计好,这样前端才能拥有最大自由的去加那些有趣的语法特性。python的语言哲学倒是挺符合我的观念的,简单。
- 函数的 执行 会引入一个新的符号表,用于函数的局部变量。更确切地说,函数中的所有的赋值都是将值存储在局部符号表;而变量引用首先查找局部符号表,然后是上层函数的局部符号表,然后是全局符号表,最后是内置名字表。因此,在函数内部全局变量不能直接赋值 (除非用 global 语句命名),虽然可以引用它们。
- 任意参数列表和参数列表的拆分。
*args
和**args
的用法。如果定义多个参数的时候,顺序必须是:必选参数、默认参数、可变参数和关键字参数。 - map()和reduce()。后者主要应用于需要保存上一次运算结果的情况,比如累加累乘。
python 库: