一、模块和包
1. 模块
Python中模块就是一个.py文件
模块中可以定义函数,变量,类
模块可以被其他模块引用
创建utils.py文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | # 定义变量
name = '张三'
# 定义函数
def sum(a,b):
return a+b
# 定义类
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return 'name:{},age:{}'.format(self.name,self.age)
|
导入模块utils中的功能
整体导入模块
| # 导入模块
import utils
# 使用模块中功能
print(utils.name)
# 调用模块中的sum方法
result = utils.sum(10,20)
# 创建模块utils中的Person类对象
p = utils.Person('张三',30)
|
局部导入模块中功能
| # 从模块中导入部分功能
from utils import name,sum
# 使用name
print(name)
# 调用sum函数
result = sum(10,20)
|
到不引入模块中所有功能
| from utils import *
# 使用name
print(name)
# 调用sum函数
result = sum(10,20)
# 创建Person对象
p = Person('林青霞',60)
|
2. 模块的引入冲突
如果两个模块中有同名的变量、函数或者类,同时引入就可能出现冲突
局部引入冲突
| from hello import name
from hi import name
print(name)
|
同时引入name的话,输出的name是hi中的name,是有顺序的
局部引入冲突解决方案
可以通过as 给功能起别名
| from hello import name as hello_name
from hi import name as hi_name
print(hello_name)
print(hi_name)
|
全部引入冲突
| from hello import *
from hi import *
print(name)
|
同样输出的是hi中的name属性
全部引入冲突解决方案
直接引入模块
| import hello
import hi
print(hello.name)
print(hi.name)
|
3. 模块的内置变量__name__
__name__是模块中内置的变量,每个模块都有这个属性
创建hello.py
__name__的值
直接运行hello.py,结果为:
其它模块导入hello.py
结果为:
__name__的特点
- 如果将当前模块作为启动项,name__值为”__main”
- 如果当前模块当作依赖引入,name__值不为”__main”
__name__作用
python没有入口函数的概念,可以通过__name__的功能
| def sum(m,n):
return m+n
if __name__ == '__main__':
a = 10
b =20
result = sum(a,b)
print(result)
|
主程序的代码放在if __name__ == '__main__':
里
4. 包
包就是个文件夹
用来放模块的
限定了模块的命名空间
包的作用
用来管理模块的
让业务更清晰化
解决一些命名的问题
| network包:可以用来管理网络访问
user模块中,可以提供登录,注册等功能
cart模块中,可以提供购物车的增删改查功能
product中,可以提供商品的查看功能
storage包:可以用来管理本地存储
user模块中,可以提供用户信息存储功能
cart模块中,可以提供购物车存储功能
product中,可以提供商品存储功能
|
通过包把类似功能的模块进行分类,让业务更加清晰
引入包中模块的功能方法一
import 包名.模块名
| import 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 属性,函数,类
1
2
3
4
5
6
7
8
9
10
11
12 | from pkg.hello import name
from pkg.hello import say
from pkg.hello import Nice
#访问模块中的属性
print(name)
#访问模块中的函数
say()
#访问模块中的类
nice = Nice()
|
引入包中模块的功能方法三
from 包名.模块名 import *
| from pkg.hello import *
#访问模块中的属性
print(name)
#访问模块中的函数
say()
#访问模块中的类
nice = Nice()
|