繁体   English   中英

Python3:为什么__spec__有效?

[英]Python3: Why does __spec__ work?

变量__spec__来自哪里?

$ brew install python3
$ python3
Python 3.4.2 (default, Jan  5 2015, 11:57:21) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

# Under Python 2.7.x this gives a NameError
>>> None is __spec__
True

Python语言参考,第5部分:导入系统 (强调我的):

__spec__属性必须设置为导入模块时使用的模块规范。 这主要用于内省和重新加载。 适当地设置__spec__同样适用于在解释器启动期间初始化的模块 一个例外是__main__ ,其中__spec__在某些情况下设置为None

版本3.4中的新功能。

根据Python 3 文档 ,如果您使用交互式promt,则__spec__始终为None

当使用-m选项启动Python时, __spec__将设置为相应模块或包的模块规范。 __main__模块作为执行目录,zipfile或其他sys.path条目的一部分加载时,也会填充__spec__

在其余情况下, __main__.__spec__ 设置为None ,因为用于填充__main__的代码与可导入模块不直接对应:

  • 互动提示
  • -c开关
  • 从stdin运行
  • 直接从源或字节码文件运行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM