C语言 kubeflow JDK动态代理 centos7安装 学生排队 centos7 service parameters Modernizr 河南普通话考试 electron安装 网校直播系统 mysql增删改查语句 安卓虚拟机运行windows maya曲线建模 mysql分区表优劣分析 查看mysql密码 python编程题 python操作文件 java中的tostring java方法的重载 怎么安装java环境 java面向对象 java遍历文件夹下所有文件 java索引 python下载教程 隐藏虚拟键 脚本软件 alphacam js获取父节点 qq免安装版 unity3d下载 cad视口旋转 英雄联盟设置 cdr字体加粗 解压tar 压枪软件 mp4剪切合并大师 苹果手机不弹出信任 js动态添加元素
当前位置: 首页 > 学习教程  > python

Python自学6(模块和包)

2021/2/8 10:44:11 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

" 尽管记忆再悲伤、我却笑着、不愿遗忘 " 更大的代码盒子—模块和包1、模块1.1、模块的导入1.2、标准库模块的导入1.3、执行模块时传入参数2、包2.1、什么是包2.2、包的导入3、模块和包存在的必要性4、总结前言两种运行 Python 代码的方式一种是解释器的交互模式、另…

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

更大的代码盒子—模块和包

  • 1、模块
    • 1.1、模块的导入
    • 1.2、标准库模块的导入
    • 1.3、执行模块时传入参数
  • 2、包
    • 2.1、什么是包
    • 2.2、包的导入
  • 3、模块和包存在的必要性
  • 4、总结

前言

  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 包名.模块名

# 模块导入后、可以使用该模块中所定义的名字(变量、函数类)
模块名.变量
模块名.函数
模块名.

本文链接: http://www.dtmao.cc/news_show_2000301.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?