第十三章 模块和包

1.模块                                                      

1.模块就是import可以导入直接使用的py文件

一个模块如果执行多次import是什么效果:只执行一次

凡是导入一个模块就相当于执行了这个文件,当你导入一个模块就可以使用模块中的名字

mymodule.py
print('执行了mymodule')

import mymodule
# 执行了mymodule

当你导入了一个模块那么在导入这个模块所处的命名空间中,就有了一个名字,指向属于自己的空间,模块中的代码从上至下依次执行,可以通过模块访问模块中的名字,不能脱离模块引用模块中的名字

mymodule.py
print('执行了mymodule')
money = 1000

def func():
    print('My moneny is %s' % money)

import mymodule
mymodule.func()

# 执行了mymodule
# My moneny is 1000

func()
#     func()
# NameError: name 'func' is not defined

当模块和当前文件中都有相同的名字,模块中的方法引用模块中的名字

mymodule.py
print('执行了mymodule')
money = 1000

def func():
    print('My moneny is %s' % money)

import mymodule

money = 2000
mymodule.func()

# 执行了mymodule
# My moneny is 1000
# 说明:模块并没有导入执行文件,所以模块中的方法引用不到执行文件中的名字

2.import .. as ..使用别名

mymodule.py
print('执行了mymodule')
money = 1000

def func():
    print('My moneny is %s' % money)

import mymodule as mm
mm.func() # --> 使用别名

# 执行了mymodule
# My moneny is 1000

3.import..from

mymodule.py
print('执行了mymodule')
money = 1000

def func():
    print('My moneny is %s' % money)

from mymodule import func
func()
def func():
    print(123)
func()
# 执行了mymodule
# My moneny is 1000
# 123

# 说明:因为导入mymodule中的func,所以第一个func(),为mymodule中的方法,输出结果为'My moneny is 1000'
# 而第二个func()是因为程序中重新定义了func,所以直接执行程序中的func()函数
# 即使程序使用from..import的形式,也会在内存里开辟相应的命名空间,将模块中的所有名字存在内存里
# 所有这样也不会减少使用内存,只不过引用是不可视的

4.import..from..as..使用别名

mymodule.py
print('执行了mymodule')
money = 1000

def func():
    print('My moneny is %s' % money)

from mymodule import func as f, money as m
f()
print(m)

# 执行了mymodule
# My moneny is 1000
# 1000

5.import和from..import的区别与联系

import
import一个模块 就相当于执行了这个模块
那么在全局,就有了一个模块名字,指向属于自己的空间
空间里存储了所有文件中的名字
起别名import ... as ...

from import
仍然会执行整个文件
文件中的名字会被存储在一块独立的内存空间
import后面的名字会出现在全局,相当于对独立命名空间中的一个引用
from import 也支持as语句 也支持 导入多个名字
from import * 相当于导入所有名字,*和被导入模块__all__是互相影响的

6.模块的导入顺序

导入模块要放到文件开始

内置模块 -- 扩展模块 -- 自定义模块

2.包                                                        

1.包是什么

包就是一个由一组py文件组成而且包含一个__init__.py文件的文件夹

__init__.py文件的作用

2.从包中导入一个模块,可以使用.描述文件夹之间的关系

3.使用import..as..别名的方式导入包中的模块

4.使用from..import..

5.在包中导入一个模块要从包名开始精确到一个模块结束

绝对导入 -- 不利于代码迁移

相对导入 -- 从包的外部导入包的内部的关系,相对导入才生效

                  带有相对导入路径的文件不能直接执行 -- 会报错

6.__init__.py的作用

导入一个文件相当于执行了这个文件中的代码

但是导入一个包相当于执行这个包中的init文件

import后面的这个名字 永远会出现在全局的名命空间里

参考:http://www.cnblogs.com/Eva-J/articles/7292109.html

猜你喜欢

转载自www.cnblogs.com/gnaix/p/9152273.html
今日推荐