![]() |
1
4
简短的版本是:是的,decorators、元类等主要是在运行时发生的事情。 这也意味着SmallTalk通常比Lisp更适合理解Python中的元编程。 1个 长版有点复杂。 Python中的“编译时”是指将函数定义、类定义和模块本身的主体编译为字节码“运行时”包括解释这些实体。 2个
尤其是像
例如,考虑这个模块:
当你
首先,那
接下来,该类主体被编译成字节码。因为班上只有
下一个,那个
这意味着你几乎可以忽略编译时发生的事情。 三
你想打电话给我吗
这也意味着反射在Python中并不是什么神奇的东西。对象在公共属性中携带其类型信息,而
好吧,我说这是不可能的,但是如果你想用Python做Lisp风格的元编程,你实际上也可以这样做。它只意味着编写和安装 import hooks .
通常,在Python中
因此,导入挂钩可以安装一个自定义加载程序,该加载程序将像默认加载程序一样进行解码、标记化和解析,然后像Lisp风格的宏那样修改AST,然后像默认加载程序一样编译并返回结果。 MacroPy . 一。事实上,IIRC,福尔曼和丹福斯的小册子的第一版 使用元类 Danforth的另一篇论文是对Python元编程设计的主要影响。 2。在交互模式下,Python编译然后一次执行一个语句,稍微混合一些,但是这些想法并没有太大的不同。 三。实际上,不同的实现可以选择在编译时比CPython做更多或更少的事情,只要语义最终相同。
the import system
并按照链接
|
![]() |
July · 如何定义数字间隔,然后四舍五入 1 年前 |
![]() |
user026 · 如何根据特定窗口的平均值(行数)创建新列? 1 年前 |
|
Ashok Shrestha · 需要追踪特定的颜色线并获取坐标 1 年前 |
![]() |
Nicote Ool · 在FastApi和Vue3中获得422 1 年前 |
|
Abdulaziz · 如何对集合内的列表进行排序[重复] 1 年前 |
![]() |
asmgx · 为什么合并数据帧不能按照python中的预期方式工作 1 年前 |