Python自学6(模块和包)

在这里插入图片描述
" 尽管记忆再悲伤、我却笑着、不愿遗忘 "


前言

  1. 两种运行 Python 代码的方式
  2. 一种是解释器的交互模式、另一种是直接运行 Python 代码文件
  3. 在 Python 中、每一个 Python 代码文件就是一个模块
  4. 写程序时、我们可以将代码分散在不同的模块(文件)中、然后在一个模块里引用另一个模块的内容

1、模块

1.1、模块的导入

# 在一个模块中引用(导入)另一个模块、可以使用 import 语句
# 这里的模块名是除去 .py 后缀的文件名称
# 如想要导入模块 abc.py、只需 import abc
import 模块名

# import 模块之后、就可以使用被导入模块中的名字(变量、函数类)
模块名.变量
模块名.函数
模块名.%1 在同一个目录下创建两个模块(二个文件)
salary_worker  # 目录名
	|___salary.py # 文件名
	|___worker.py # 文件名

# 第一个模块名为 salary.py
# salary1 用来保存开始的薪水、将在函数 harvest() 中使用
# random.randint(1, 9)、随机生成 1~9 中的一个数
# salary1 * 数字 得到不断努力后返回的工资
import random

salary1 = 100

def harvest():
    return salary1 * random.randint(1, 9)

# 第二个模块名为 worker.py
# 第一行用 import salary将 salary.py 模块导入进来
#(使用 import 导入时不需要写 .py 后缀)
# 导入 salary 模块后、就可以使用其中的变量和函数了
# 将 salary.salary1 设置为 200
# 调用 salary.harvest() 来得出总工资
import salary

print('我有工资了')
salary.salary1 = 200

print('不断努力')
salary = salary.harvest()
print(salary)

# 执行模块 worker.py 
# output:我有工资了
#         不断努力
#         200~400~600~...~1800的数(间隔200)

1.2、标准库模块的导入

  1. 我们自己定义了模块、然后在其它模块中使用它
  2. 其中有个地方不知道你有没有注意到
  3. salary.py 的第一行代码是 import random
  4. random 并不是我们所定义的模块
# random 是标准库中的一个模块
# 标准库是由 Python 官方开发的代码库、和解释器一起打包分发
# 其中包含非常多实用的模块、我们在使用时直接 import 进来即可

import random
a = random.randint(1,9)
# 用来产生1~8之间的随机数
print(a)
# output:6

1.3、执行模块时传入参数

# 在Python交互环境中、用这种方式来执行模块
python3 模块文件名

# 我们还可以进一步将参数传递到模块中去
python3 模块文件名 参数1 ...参数n

# 参数传递到模块中以后、我们可以通过 sys 模块来取出这些参数
# 参数放在 sys.argv 列表中
# 首先需要导入 sys 模块、这是个标准库中的模块
# sys.argv 是个列表、执行模块时被传递进来的参数保存在其中
# 它的列表项分别为:
# sys.argv[0] 保存当前被执行模块的文件名
# sys.argv[1] 保存第 1 个参数
# sys.argv[2] 保存第 2 个参数
# 依次类推
import sys

模块文件名 = sys.argv[0]
参数1     = sys.argv[1]
参数N     = sys.argv[N]

%1 修改之前的worker.py代码
# 第二个模块名为 worker.py
# 第一行用 import salary将 salary.py 模块导入进来
#(使用 import 导入时不需要写 .py 后缀)
# 导入 salary 模块后、就可以使用其中的变量和函数了
# 将 salary.salary1 设置为 200
# 调用 salary.harvest() 来得出总工资
import salary
import sys

print('我有工资了')
salary.salary1 = sys.argv[1]

print('不断努力')
salary = salary.harvest()
print(salary)

# 执行模块 worker.py 400
# output:我有工资了
#         不断努力
#          400~800~1200~...~3200的数(间隔400)
#在这个例子中 sys.argv 的值是:
# sys.argv[0]: worker.py
# sys.argv[1]: 400

2、包

2.1、什么是包

  1. 之前我们将定义的两个模块放在同一目录下
  2. 然后通过 import 语句来相互引用
  3. 这是一种扁平的模块组织结构
  4. 当模块数量很大的时候就很不灵活了、也难以维护
  5. Python 中可以用文件树这样的树形结构来组织模块
  6. 这种组织形式下的模块集合称为包(Package)
# 语法/
├── __init__.py
├── 模块1.py
├── 模块2.py
├── 子包1/
    ├── __init__.py
    ├── 模块3.py
    └── 模块4.py
└── 子包2/
    ├── __init__.py
    ├── 模块5.py
    └── 孙子包1/
        ├── __init__.py
        └── 模块6.py

# 这是个很明显的层级结构
# 包里面包含子包、子包包含孙子包...
# 单独将子包或孙子包拿出来、它们也是包
# 包的存在形式是目录、模块的存在形式是目录下的文件
# 所以我们可以很容易地构造出这样一个包
# 只要在文件系统中创建相应的目录和文件即可
# 需要注意的是、每个层级的包下都需要有一个 __init__.py 模块
# 这是因为只有当目录中存在 __init__.py 时、Python 才会把这个目录当作包

2.2、包的导入

# 语法
# 从最顶层的包开始依次向下引用子包、直至目标模块
import.子包.模块

# 从上面示例的包结构中
# 导入 模块1.py
import.模块1

# 导入 模块3.py
import.子包1.模块3

# 导入 模块6.py
import.子包2.孙子包1.模块6

3、模块和包存在的必要性

  1. 模块的存在是为了更好的组织代码
  2. 将不同功能的代码分散在不同模块中
  3. 清晰地划分出各个模块的职责、有利于使用和维护代码
  4. 同时也可避免模块中的内容过长
  5. 包的存在是为了更好的组织模块
  6. 与模块同理、包在更高的抽象层次上组织着代码

4、总结

  • 模块可以更好的组织代码、它的存在形式是文件

  • 包的可以更好的组织模块、它的存在形式是目录

# 导入模块使用 import 语句
import 模块名

# 导入包下的模块
import 包名.模块名

# 模块导入后、可以使用该模块中所定义的名字(变量、函数类)
模块名.变量
模块名.函数
模块名.
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是我来晚了!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值