1、模块搜索路径
import sys
sys.path
这个列表中保存了模块搜索路径,如果需要增加路径,可以通过append来增加列表元素
sys.modules,表明当前已经import了哪些模块和他们的路径
2、名字空间
包括有:内建名字空间、全局名字空间、局部名字空间,解释器,加载名字空间的顺序也是如此。
3、模块的导入
模块的导入方法如下,可以在as后面跟缩写,可选的,如果在代码的顶层导入,模块的作用域为全局的,如果在函数中导入,作用域仅作用域函数
import *** as ***
from *** import *** as ***
有些模块是自动导入的,可以通过sys.modules来查看
4、被导入到导入者作用域的名字
这里我们提供了两个模块的代码: 一个导入者, impter.py , 一个被导入者, imptee.py 。impter.py 使用 from-import 语句只创建了局部绑定。
#############
# imptee.py #
#############
foo = 'abc'
def show():
print 'foo from imptee:', foo
#############
# impter.py #
#############
from imptee import foo, show
show()
foo = 123
print 'foo from impter:', foo
show()
运行这个导入者程序, 我们发现从被导入者的观点看, 它的 foo 变量没有改变, 即使 我们在 importer.py 里修改了它。
foo from imptee: abc
foo from impter: 123
foo from imptee: abc
唯一的解决办法是使用 import 和完整的标识符名称(句点属性标识)。
#############
# impter.py #
#############
import imptee
imptee.show()
imptee.foo = 123
print 'foo from impter:', imptee.foo
imptee.show()
完成相应修改后, 结果如我们所料:
foo from imptee: abc
foo from impter: 123
foo from imptee: 123
5、globals() 和 locals()
globals() 和 locals() 内建函数分别返回调用者全局和局部名称空间的字典。
def foo():
print '\ncalling foo()...'
aString = 'bar'
anInt = 42
print "foo()'s globals:", globals().keys()
print "foo()'s locals:", locals().keys()
print "__main__'s globals:", globals().keys()
print "__main__'s locals:", locals().keys()
foo()
结果:
__main__'s globals: ['__doc__', 'foo', '__name__', '__builtins__']
__main__'s locals: ['__doc__', 'foo', '__name__', '__builtins__']
calling foo()...
foo()'s globals: ['__doc__', 'foo', '__name__', '__builtins__']
foo()'s locals: ['anInt', 'aString']
6、包的绝对导入和相对导入
相对导入:
from Phone.Mobile.Analog import dial
from .Analog import dial
from ..common_util import setup
from ..Fax import G3.dial.