Python模块和包:导入制作模块、name、模块定位顺序(文件名与模块名重复、功能名与功能名重复、函数名与功能名重复、变量名与模块名重复)、from 模块名 import *__all__列表、包
一、模块
- Python 模块(Module),是⼀个 Python ⽂件,以 .py 结尾,包含了 Python 对象定义和Python语句。
- 模块能定义函数,类和变量,模块⾥也能包含可执⾏的代码。
二、导入模块
1、导入模块的方式:
- 1.import 模块名
- 2.from 模块名 import 功能名1, 功能名2, 功能名3…
- 3.from 模块名 import *
- 4.import 模块名 as 别名
- 5.from 模块名 import 功能名 as 别名
2.1、调用模块的方式
- 导入模块:import 模块名
- 调用模块:模块名.功能名()
- 注意:模块名不能与当前目录里的文件重名,否则优先调用当前目录同名文件
import math
print(math.sqrt(9)) # 3.0
2.2、调用模块的方式
- 导入模块:from 模块名 import 功能名1, 功能名2, 功能名3…
- 调用模块:功能名()
- 调用时直接使用功能,省去了写模块名
- 相当于是from 模块名 import * 的具体化
- 注意:模块名不能与当前目录里的文件重名,否则优先调用当前目录同名文件;功能名不能与当前文件里的函数重名,否则优先使用后定义或后导入的同名功能
from math import sqrt
print(sqrt(2)) # 1.4142135623730951
2.3、调用模块的方式
- 导入模块:from 模块名 import *
- 调用模块:功能名()
- 调用时直接使用功能,省去了写模块名
- 相当于是from 模块名 Import 功能名1, 功能名2,……的宽泛化
from math import *
print(sqrt(3)) # 1.7320508075688772
2.4、调用模块的方式
- 定义模块:import 模块名 as 别名
- 调用模块:别名.功能名()
- 为了提高效率,模块原有的名字使用不太方便,用as别名
- 定义了别名,就不能再使用原模块名,只能使用别名,否则报错
2.5、调用模块的方式
- 定义模块:from 模块名 import 功能名 as 别名
- 调用模块:
- 为了提高效率,功能原有的名字使用不太方便,用as别名
- 定义了别名,就不能再使用原功能名,只能使用别名,否则报错
# 模块别名
import time as t
t.sleep(2)
print("hello")# 功能别名
from time import sleep as sl
sl(2)
print("hello")
三、制作模块
- 在Python中,每个Python文件都可以作为⼀个模块,模块名就是文件的名字。也就是说⾃定义模块名必须要符合标识符命名规则。
- 可以把项目中频繁使用的代码封装到模块里,需要时导入模块调用功能
1、定义模块
需求:新建⼀个Python⽂件,命名为my_module1.py ,并定义 testA 函数。
2、测试模块,注意事项
- 在实际开中,当⼀个开发⼈员编写完⼀个模块后,为了让模块能够在项⽬中达到想要的效果,这个开发⼈员会⾃⾏在py⽂件中添加⼀些测试信息.,例如,在 my_module1.py ⽂件中添加测试代码。
- 此时,⽆论是当前⽂件,还是其他已经导⼊了该模块的⽂件,在运⾏的时候都会⾃动执⾏ testA 函数的调⽤。
输出:
3 # 我们并未导入测试信息,但测试信息也同时输出了,因此要把测试信息去掉
5
- 如何解决?
- 每个模块都是一个py文件,每个文件都有自己的名字,name__是系统变量,是每一个py文件的标识符。**如果__name__在自身模块里运行,它的值就是__main,如果__name__被调入其它文件里运行,它的值是模块名即文件名。**
输出:__main__
输出:my_module1
输出:3
输出:5
四、模块定位顺序
当导⼊⼀个模块,Python解析器搜索模块时按由近到远的顺序进行搜索:
- 当前目录(当前py文件所在的文件夹)
- 解释器安装目录:如果不在当前⽬录,Python则搜索在shell变量PYTHONPATH下的每个⽬录。(pythonpath:python解释器默认安装的目录)
- 如果以上目录都找不到,Python会察看默认路径。UNIX下,默认路径⼀般为/usr/local/lib/python/
- 总的来说,Python解析器按由近及远搜索
模块搜索路径存储在system模块的sys.path变量中。变量⾥包含当前⽬录,PYTHONPATH和由安装过程决定的默认⽬录。
注意:
- 自己的文件名不要和已有模块名重复,否则导致模块功能无法使用
- 使用from 模块名 import 功能名 的时候,如果功能名字重复,调用到的是最后定义或导⼊的功能。
示例1:当前文件名exercise与模块名random不同,程序正常运行
示例2:新建一个文件,文件命名为random与模块名random相同,在文件random中不写任何代码,然后返回exercise右键运行……
程序报错,因为import random后,Python解析器会按由近到远的顺序搜索同名模块。在本地目录下搜索到random.py,然后导入这个文件,就不会再去搜索pythonpath下面的random模块,导致错误。
- 自己的文件名不要和已有模块名重复,否则导致模块功能无法使用
示例3:当使用from 模块名 import 功能名,如果导入的功能名重复,导入的是后定义或后导入的同名功能。
# 模块random的randint()
from random import randint
print(randint(1, 5))# 自定义函数randint()
def randint():print("这是自定义的randint函数")输出:3 # 程序正常运行
# 模块random的randint()
from random import randint# 自定义函数randint()
def randint():print("这是自定义的randint函数")print(randint(1, 5))
输出:报错
报错分析:print语句位置不同,调用randint,调用到的同名功能不同
- 使用from 模块名 import 功能名 的时候,如果功能名字重复,调用到的是最后定义或导⼊的功能。
五、扩展名重复的问题
1、使用import 模块名,导入模块,如果要使用的功能名重复?
答:无须担心,因为这种导入方式,调用时使用模块名.功能名(),这不会重复
2、同一个py文件,变量名与模块名重名,后面的同名变量覆盖前面的模块
import time # 导入time模块
print(time) # 打印time模块名,返回mudule time built-intime = 1 # 同时在同一个py文件中定义一个同名变量time,赋值1
print(time) # 打印time,程序正常运行,返回变量值1。说明同名变量覆盖了模块。输出:(程序正常运行)
<module 'time' (built-in)>
1
分析:Python中,数据都是通过引用传递的,time引用time模块,time也引用数值1,后引用的覆盖前面引用的,即给time变换了引用。
六、from 模块名 import *和__all__列表
- __all__是模块文件中的一个变量名,这个变量的取值是一个列表数据。
- 当使⽤ from 模块名 import * 导⼊时,默认导入模块的所有代码,但如果⼀个模块⽂件中有 all 变量,这种方式导入,只能导⼊这个__all__列表中的元素所携带的功能,不在__all__列表的代码都不会导入。
在exercise文件里调用my_module1
运行,报错,testA调用成功,testB调用失败。
import my_module1my_module1.testA()
my_module1.testB()输出: # 这说明其它导入方式不受__all__列表的限制,功能都可以导入
这是testA
这是testB
七、包 Python Package
包将很多有联系的模块组织在⼀起,即放到同⼀个文件夹下就是包,文件夹名就是包名,并且在这个⽂件夹会自动创建⼀个名字为 init.py ⽂件,那么这个⽂件夹就称之为包。
八、制作包
- [New] — [Python Package] — 输⼊包名 — [OK] — 新建功能模块(有联系的模块)。
- 注意:新建包后,包内部会⾃动创建 init.py ⽂件,这个⽂件控制着包的导⼊⾏为。
需求:
- 新建包 mypackage
- 新建包内模块: my_module1 和 my_module2
1.右键,new,Python package
2.点击新建的包mypackage,右键,点击Python File
九、导入包、调用功能
方法一:
- 导入包:import 包名.模块名
- 调用功能:包名.模块名.⽬标
# 方法一,
# 导入mypackage包下的模块1,将来使用这个模块内的printinfo1函数
import mypackage.my_module1
mypackage.my_module1.printinfo1()输出:
1
这是my_module1.py
也可以在其它文件里调用这个包,使用包里的功能
方法二:
- 导入包:from 包名 import *
- 调用功能:模块名.⽬标
- 注意:必须在 _init_.py ⽂件中添加 _all_ = [] ,控制允许导⼊的模块列表,只有__all__列表里的模块才会被导入。
输出:
1
这是my_module1.py
测试把__init__.py里的__all__注释掉,看看能不能调用。结果是报错。
十、模块和包小结
模块,是一个普通的py文件,这个文件里有变量、函数、类等,这个文件里可以书写大量代码,可以导入,然后其他的文件就可以灵活调用这个模块当中的功能。
PS: source,itheima
Python模块和包:导入制作模块、name、模块定位顺序(文件名与模块名重复、功能名与功能名重复、函数名与功能名重复、变量名与模块名重复)、from 模块名 import *__all__列表、包相关推荐
- linux如何运行rpm包,如何制作RPM包
安装制作rpm工具rpmbuild yum install -y rpm-build 创建用户 注意: 创建rpm包一定不要使用root用户,因为root用户权限比较大,如果脚本编写错误的话,可能会导 ...
- go get 指定版本_没有VPS搭建govanityurls服务?别急!你依然可以自定义Go包导入路径...
我们见到的Go包的导入路径常常以github.com.bitbucket.org等代码托管站点的域名为前缀,这样的包导入路径有一个问题,那就是当Go包的托管站点发生变更时(比如从github.om迁移 ...
- python哪里下载import包-【Python实战】模块和包导入详解(import)
1.模块(module) 1.1 模块定义 通常模块为一个.py文件,其他可作为module的文件类型还有".pyo".".pyc".".pyd&qu ...
- python哪里下载import包-详解python中的模块及包导入
python中的导入关键字:import 以及from import 1.import import一般用于导入包以及模块. 不过有个小问题: (1)当导入的是模块的时候是可以直接可以使用模块内的函数 ...
- python哪里下载import包-【Python包】模块和包导入详解(import)
1.模块(module) 1.1 模块定义 通常模块为一个.py文件,其他可作为module的文件类型还有".pyo".".pyc".".pyd&qu ...
- python中使用什么导入模块-python—模块导入和类
1.查询模块:按目录依次查找需要导入的模块,模块目录一般在:/usr/lib64/python2.7 In [2]: sys.path Out[2]: ["", "/us ...
- python标准库对象导入语句_Python标准库之Sys模块使用详解
sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分. 处理命令行参数 在解释器启动后, argv 列表包含了传递给脚本的所有参数, 列表的第一个元素为脚本自身的名称. 使用sy ...
- python无法导入模块_python怎么导入模块
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句.模块让你能够有逻辑地组织你的 Python 代码段. 把相关的代码分 ...
- python用什么来写模块-Python常用模块——模块介绍与导入
Python常用模块--模块介绍与导入 一.什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分 ...
最新文章
- arcgis合并tif影像_微图影像地图导出拼接大图的参数说明
- jenkins 修改工作目录
- 广东省生态土壤所孙蔚旻团队FEMS: 砷锑污染土壤剖面的微生物世界
- 《数字视频和高清:算法和接口》一第2章 图像的采样和显示
- JSP连接数据库 - MySQL
- 快速安装LNMP环境
- CSS3 iphone式开关的推荐写法
- Windows11 Docker镜像存储路径更改(非C盘路径)
- loadrunner脚本中关于httpCode401特殊情况
- 用Python实现最强大脑游戏
- 我进滑雪场前做的功课
- Web性能技巧-超越基础
- Android本地文件存储,机身和外置sd卡
- 怎样查看ie浏览器的版本号
- 维嘉科技IPO被终止:年营收8亿 邱四军控制61%股权
- d3.js折线图_学习使用D3.js创建折线图
- redhat 新开启一个ssh端口
- Axure对话框的设计
- ai智能外呼系统营销服务一体化中的必备工具
- linux dd命令卡住,dd后新盘系统无法启动,解决(上)