模块module

模块是 Python 程序架构的一个核心概念。Python中模块就是一个.py文件,模块中可以定义函数变量。模块可以被其他模块引用

创建模块文件

创建文件:utils.py

  1. # 定义变量
  2. name = '张三'
  3. # 定义函数
  4. def sum(a,b):
  5. return a+b
  6. # 定义类
  7. class Person:
  8. def __init__(self,name,age):
  9. self.name = name
  10. self.age = age
  11. def __str__(self):
  12. return 'name:{},age:{}'.format(self.name,self.age)

导入模块中的功能

整体导入模块

  1. # 导入模块
  2. import utils
  3. # 使用模块中功能
  4. print(utils.name)
  5. # 调用模块中的sum方法
  6. result = utils.sum(10,20)
  7. # 创建模块utils中的Person类对象
  8. p = utils.Person('张三',30)

导入模块中部分功能

  1. # 从模块中导入部分功能
  2. from utils import name, sum
  3. # 使用name
  4. print(name)
  5. # 调用sum函数
  6. result = sum(10,20)

导入模块中全部功能

  1. from utils import *
  2. # 使用name
  3. print(name)
  4. # 调用sum函数
  5. result = sum(10,20)
  6. # 创建Person对象
  7. p = Person('林青霞',60)

模块的导入冲突

如果两个模块中有同名的变量、函数或者类,同时引入就可能出现冲突
模块和包 - 图1

部分导入冲突

  1. from hello import name
  2. from hi import name
  3. print(name)

同时引入name的话,输出的namehi中的name,是有顺序的

局部引入冲突解决方案
可以通过as 给功能起别名

  1. from hello import name as hello_name
  2. from hi import name as hi_name
  3. print(hello_name)
  4. print(hi_name)

全部导入冲突

  1. from hello import *
  2. from hi import *
  3. print(name)

同样输出的是hi中的name属性

全部引入冲突解决方案
直接引入模块

  1. import hello
  2. import hi
  3. print(hello.name)
  4. print(hi.name)

模块的内置变量__name__

__name__是模块中的内置变量,每个模块都有这个属性
创建hello.py

  1. print(__name__)

直接运行hello.py,结果为:

  1. __main__

其它模块导入hello.py

  1. import hello

结果为:

  1. hello

__name__的特点

  • 如果将当前模块作为启动项,__name__值为__main__
  • 如果当前模块当作依赖引入,__name__值不为__main__,为依赖的模块名称

    __name__作用

    python没有入口函数的概念,可以通过__name__的功能 ```python def sum(m,n): return m+n

if name == ‘main‘: a = 10 b =20 result = sum(a,b) print(result)

  1. 主程序的代码放在`if __name__ == '__main__':`里。这样当前模块即可以独立测试运行,也可以被其他文件导入使用。如果不添加此`if`判断,别的地方导入当前文件模块时,会运行一些不需要的代码。
  2. <a name="GVcUw"></a>
  3. ## 包 package
  4. 包就是个文件夹,用来放模块的,限定了模块的命名空间
  5. <a name="UoDTK"></a>
  6. ### 包的作用
  7. - 用来管理模块的
  8. - 让业务更清晰化
  9. - 解决一些命名的问题
  10. ![](https://cdn.nlark.com/yuque/0/2023/png/27903758/1684895562356-4dc55de1-15ac-476c-a0ac-b79c6819e334.png#averageHue=%23070707&clientId=uf8a88636-e8bb-4&from=paste&id=u8881c50d&originHeight=188&originWidth=177&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u409834a8-3b28-46e9-a71f-6b9cee2a758&title=)

network包:可以用来管理网络访问 cart模块中,可以提供购物车的增删改查功能 product中,可以提供商品的查看功能 user模块中,可以提供登录,注册等功能

storage包:可以用来管理本地存储 cart模块中,可以提供购物车存储功能 product中,可以提供商品存储功能 user模块中,可以提供用户信息存储功能

  1. 通过包把类似功能的模块进行分类,让业务更加清晰
  2. <a name="EjybA"></a>
  3. ### 引入包中模块的功能方法一
  4. `import 包名.模块名`
  5. ```python
  6. import pkg.hello
  7. #访问模块中的属性
  8. print(pkg.hello.name)
  9. #访问模块中的函数
  10. pkg.hello.say()
  11. #访问模块中的类
  12. nice = pkg.hello.Nice()

引入包中模块的功能方法二(推荐)

from 包名 import 模块名

  1. from pkg import hello
  2. #访问模块中的属性
  3. print(hello.name)
  4. #访问模块中的函数
  5. hello.say()
  6. #访问模块中的类
  7. nice = hello.Nice()

引入包中模块的功能方法三(推荐)

from 包名.模块名 import 变量,函数,类

  1. from pkg.hello import name
  2. from pkg.hello import say
  3. from pkg.hello import Nice
  4. #访问模块中的属性
  5. print(name)
  6. #访问模块中的函数
  7. say()
  8. #访问模块中的类
  9. nice = Nice()

引入包中模块的功能方法四

from 包名.模块名 import *

  1. from pkg.hello import *
  2. #访问模块中的属性
  3. print(name)
  4. #访问模块中的函数
  5. say()
  6. #访问模块中的类
  7. nice = Nice()