一、模块

  • 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解析器搜索模块时按由近到远的顺序进行搜索

  1. 当前目录(当前py文件所在的文件夹)
  2. 解释器安装目录:如果不在当前⽬录,Python则搜索在shell变量PYTHONPATH下的每个⽬录。(pythonpath:python解释器默认安装的目录)
  3. 如果以上目录都找不到,Python会察看默认路径。UNIX下,默认路径⼀般为/usr/local/lib/python/
  4. 总的来说,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 ⽂件,那么这个⽂件夹就称之为包。

八、制作包

  1. [New] — [Python Package] — 输⼊包名 — [OK] — 新建功能模块(有联系的模块)。
  2. 注意:新建包后,包内部会⾃动创建 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__列表、包相关推荐

  1. linux如何运行rpm包,如何制作RPM包

    安装制作rpm工具rpmbuild yum install -y rpm-build 创建用户 注意: 创建rpm包一定不要使用root用户,因为root用户权限比较大,如果脚本编写错误的话,可能会导 ...

  2. go get 指定版本_没有VPS搭建govanityurls服务?别急!你依然可以自定义Go包导入路径...

    我们见到的Go包的导入路径常常以github.com.bitbucket.org等代码托管站点的域名为前缀,这样的包导入路径有一个问题,那就是当Go包的托管站点发生变更时(比如从github.om迁移 ...

  3. python哪里下载import包-【Python实战】模块和包导入详解(import)

    1.模块(module) 1.1 模块定义 通常模块为一个.py文件,其他可作为module的文件类型还有".pyo".".pyc".".pyd&qu ...

  4. python哪里下载import包-详解python中的模块及包导入

    python中的导入关键字:import 以及from import 1.import import一般用于导入包以及模块. 不过有个小问题: (1)当导入的是模块的时候是可以直接可以使用模块内的函数 ...

  5. python哪里下载import包-【Python包】模块和包导入详解(import)

    1.模块(module) 1.1 模块定义 通常模块为一个.py文件,其他可作为module的文件类型还有".pyo".".pyc".".pyd&qu ...

  6. python中使用什么导入模块-python—模块导入和类

    1.查询模块:按目录依次查找需要导入的模块,模块目录一般在:/usr/lib64/python2.7 In [2]: sys.path Out[2]: ["", "/us ...

  7. python标准库对象导入语句_Python标准库之Sys模块使用详解

    sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分. 处理命令行参数 在解释器启动后, argv 列表包含了传递给脚本的所有参数, 列表的第一个元素为脚本自身的名称. 使用sy ...

  8. python无法导入模块_python怎么导入模块

    Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句.模块让你能够有逻辑地组织你的 Python 代码段. 把相关的代码分 ...

  9. python用什么来写模块-Python常用模块——模块介绍与导入

    Python常用模块--模块介绍与导入 一.什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分 ...

最新文章

  1. arcgis合并tif影像_微图影像地图导出拼接大图的参数说明
  2. jenkins 修改工作目录
  3. 广东省生态土壤所孙蔚旻团队FEMS: 砷锑污染土壤剖面的微生物世界
  4. 《数字视频和高清:算法和接口》一第2章 图像的采样和显示
  5. JSP连接数据库 - MySQL
  6. 快速安装LNMP环境
  7. CSS3 iphone式开关的推荐写法
  8. Windows11 Docker镜像存储路径更改(非C盘路径)
  9. loadrunner脚本中关于httpCode401特殊情况
  10. 用Python实现最强大脑游戏
  11. 我进滑雪场前做的功课
  12. Web性能技巧-超越基础
  13. Android本地文件存储,机身和外置sd卡
  14. 怎样查看ie浏览器的版本号
  15. 维嘉科技IPO被终止:年营收8亿 邱四军控制61%股权
  16. d3.js折线图_学习使用D3.js创建折线图
  17. redhat 新开启一个ssh端口
  18. Axure对话框的设计
  19. ai智能外呼系统营销服务一体化中的必备工具
  20. linux dd命令卡住,dd后新盘系统无法启动,解决(上)

热门文章

  1. docker使用阿里云镜像仓库
  2. Python学习笔记(八)随机数的处理
  3. Django的基础操作总结
  4. 尝试实现手势控制计算机(持续跟进)
  5. 每天干的啥?(2018.06)
  6. .NET 对接JAVA 使用Modulus,Exponent RSA 加密
  7. Unity中使用多构造函数(转)
  8. concurrenthashmap_ConcurrentHashMap原理浅析
  9. linux上derby数据库,体验纯Java数据库——Derby
  10. js获取服务器响应头信息,请问,js中请求头信息和返回头信息的方法