print __path__
__path__.append(".") # CWD, would be different in non-example code
print __path__
from . import example # this is example.py from above, and is NOT in mungepath/
# note that this is a degenerate case, in that we now have two names for the
# 'same' module: example and mungepath.example, but they're really different
# modules with different functions (use 'is' or 'id()' to verify)
互动环节:
>>> import example
Creating example module.
Creating function example.a.
>>> example.__dict__.keys()
['a', '__builtins__', '__file__', 'show_def', '__package__',
'__name__', '__doc__']
>>> import mungepath
['mungepath']
['mungepath', '.']
Creating mungepath.example module.
Creating function mungepath.example.a.
>>> mungepath.example.a()
called: mungepath.example.a
>>> example is mungepath.example
False
>>> example.a is mungepath.example.a
False
a.Python代码是经过词法分析和编译成Python特定指令的,但不是编译成机器可执行代码。每当运行与现有的.pyc时间戳不匹配的python代码时,.pyc”文件将自动创建。此功能可以关闭。您可以使用dis模块来查看这些说明。
b、 当一个模块被导入时,它将在它自己的命名空间中执行(从上到下),并且该命名空间被全局缓存。从其他模块导入时,不会再次执行该模块。记住def只是一个声明。您可能需要在代码中放入print('compileding this module')语句来跟踪它。
模块是Python中唯一真正的全局对象,所有其他全局数据都基于模块系统(它使用系统模块作为注册表)。包只是具有特殊语义的模块,用于导入子模块。”将.py文件编译成.pyc或.pyo并不像大多数语言所理解的那样进行编译:它只检查语法并创建一个code对象,当在解释器中执行时,它将创建module对象。在
在示例.py公司名称:
互动环节:
^{pr2}$您的问题:
is
操作符和id()
)之外,复制是可行的。在mungepath/\uu init_uu.py:
互动环节:
你问了很多问题。下面是一些提示,可以进一步了解:
a.Python代码是经过词法分析和编译成Python特定指令的,但不是编译成机器可执行代码。每当运行与现有的.pyc时间戳不匹配的python代码时,.pyc”文件将自动创建。此功能可以关闭。您可以使用dis模块来查看这些说明。 b、 当一个模块被导入时,它将在它自己的命名空间中执行(从上到下),并且该命名空间被全局缓存。从其他模块导入时,不会再次执行该模块。记住def只是一个声明。您可能需要在代码中放入print('compileding this module')语句来跟踪它。
要看情况而定。
最近有一些改进,主要是关于指定需要加载哪个模块。模块可以有相对路径,这样一个巨大的项目可能有多个同名的模块。
Python本身不适合编译语言。谷歌搜索“unladen swallow blog”以了解试图加速一种“a=sum(b)”可以在两次执行之间改变含义的语言所带来的痛苦。在角落案例之外,模块系统在源代码和编译的库系统之间形成了一个很好的桥梁。这种方法效果很好,Python对C代码的简单包装(swig等)也有帮助。
全局数据的作用域在解释器级别。在
相关问题 更多 >
编程相关推荐