Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
1、导入模块
from..import和import..区别
在同一路径下新建文件now.py
# -*- coding:UTF-8 -*-
Money = 2000
def AddMoney(a):
global Money
Money = Money + a
return Money
(1)使用from..import..
test2.py
from now import *
print AddMoney(2)
运行结果:
(2)使用import..
test2.py
# -*- coding:UTF-8 -*-
import now
print AddMoney(2)
运行结果:
会出现AddMoney没有定义的异常
此时需要添加前缀模块名,即将test2.py改为
# -*- coding:UTF-8 -*-
import now
print now.AddMoney(2)
2、命名空间和作用域
Python 假设任何在函数内赋值的变量都是局部的。因此,如果要给函数内的全局变量赋值,必须使用 global 语句。
# -*- coding:UTF-8 -*-
Money = 2000
def AddMoney(a):
# global Money
Money = Money + a
return Money
AddMoney(3)
直接运行上面代码结果:
出现了局部变量Money在引用前没有被赋值的异常,然而我们想要的是使用已经赋值的全局变量Money,此时把取消注释里的global Money即可。
3、python中的包
包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__init__.py 用于标识当前文件夹是一个包。
__main__:主程序
__name__ :当前模块名
- 如果模块是被导入的,__name__ 的值是 模块的名字
- 如果模块是直接执行,__name__ 的值是 __main__
(1)now.py
# -*- coding:UTF-8 -*-
Money = 2000
def AddMoney(a):
global Money
Money = Money + a
return Money
print AddMoney(5)
print __name__
运行结果:
(2)test.py
#coding:utf-8
import now
print now.AddMoney(5)
运行结果:
可以看到此时now.py中函数外的print AddMoney(5)也被执行了,此时如果我们不想顶层代码被执行,可以进行如下判断:
将now.py改为
# -*- coding:UTF-8 -*-
Money = 2000
def AddMoney(a):
global Money
Money = Money + a
return Money
if __name__ == '__main__':
print AddMoney(5)
print __name__