模块module
模块是 Python 程序架构的一个核心概念。Python中模块就是一个.py文件,模块中可以定义函数,变量,类。模块可以被其他模块引用
创建模块文件
创建文件:utils.py
# 定义变量name = '张三'# 定义函数def sum(a,b):return a+b# 定义类class Person:def __init__(self,name,age):self.name = nameself.age = agedef __str__(self):return 'name:{},age:{}'.format(self.name,self.age)
导入模块中的功能
整体导入模块
# 导入模块import utils# 使用模块中功能print(utils.name)# 调用模块中的sum方法result = utils.sum(10,20)# 创建模块utils中的Person类对象p = utils.Person('张三',30)
导入模块中部分功能
# 从模块中导入部分功能from utils import name, sum# 使用nameprint(name)# 调用sum函数result = sum(10,20)
导入模块中全部功能
from utils import *# 使用nameprint(name)# 调用sum函数result = sum(10,20)# 创建Person对象p = Person('林青霞',60)
模块的导入冲突
如果两个模块中有同名的变量、函数或者类,同时引入就可能出现冲突
部分导入冲突
from hello import namefrom hi import nameprint(name)
同时引入name的话,输出的name是hi中的name,是有顺序的
局部引入冲突解决方案
可以通过as 给功能起别名
from hello import name as hello_namefrom hi import name as hi_nameprint(hello_name)print(hi_name)
全部导入冲突
from hello import *from hi import *print(name)
同样输出的是hi中的name属性
全部引入冲突解决方案
直接引入模块
import helloimport hiprint(hello.name)print(hi.name)
模块的内置变量__name__
__name__是模块中的内置变量,每个模块都有这个属性
创建hello.py
print(__name__)
直接运行hello.py,结果为:
__main__
其它模块导入hello.py
import hello
结果为:
hello
__name__的特点
- 如果将当前模块作为启动项,
__name__值为__main__ - 如果当前模块当作依赖引入,
__name__值不为__main__,为依赖的模块名称
python没有入口函数的概念,可以通过__name__作用__name__的功能 ```python def sum(m,n): return m+n
if name == ‘main‘: a = 10 b =20 result = sum(a,b) print(result)
主程序的代码放在`if __name__ == '__main__':`里。这样当前模块即可以独立测试运行,也可以被其他文件导入使用。如果不添加此`if`判断,别的地方导入当前文件模块时,会运行一些不需要的代码。<a name="GVcUw"></a>## 包 package包就是个文件夹,用来放模块的,限定了模块的命名空间<a name="UoDTK"></a>### 包的作用- 用来管理模块的- 让业务更清晰化- 解决一些命名的问题
network包:可以用来管理网络访问 cart模块中,可以提供购物车的增删改查功能 product中,可以提供商品的查看功能 user模块中,可以提供登录,注册等功能
storage包:可以用来管理本地存储 cart模块中,可以提供购物车存储功能 product中,可以提供商品存储功能 user模块中,可以提供用户信息存储功能
通过包把类似功能的模块进行分类,让业务更加清晰<a name="EjybA"></a>### 引入包中模块的功能方法一`import 包名.模块名````pythonimport pkg.hello#访问模块中的属性print(pkg.hello.name)#访问模块中的函数pkg.hello.say()#访问模块中的类nice = pkg.hello.Nice()
引入包中模块的功能方法二(推荐)
from 包名 import 模块名
from pkg import hello#访问模块中的属性print(hello.name)#访问模块中的函数hello.say()#访问模块中的类nice = hello.Nice()
引入包中模块的功能方法三(推荐)
from 包名.模块名 import 变量,函数,类
from pkg.hello import namefrom pkg.hello import sayfrom pkg.hello import Nice#访问模块中的属性print(name)#访问模块中的函数say()#访问模块中的类nice = Nice()
引入包中模块的功能方法四
from 包名.模块名 import *
from pkg.hello import *#访问模块中的属性print(name)#访问模块中的函数say()#访问模块中的类nice = Nice()
