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
原文地址:https://www.cnblogs.com/gnaix/p/9152273.html