模块和包的相关知识点

333_了解模块

课程:模块和包
目标

  • 了解模块
  • 导入模块
  • 制作模块
  • all
  • 包的使用方法
    一、模块
    Python模块(Module),是一个Python文件,以.py结尾,包含了python对象定义和python语句。模块能定义函数,类和变量,模块里也能包含可执行的代码。

334_导入模块之方法一

1.1 导入模块
1.1.1 导入模块的方式

  • import模块名
  • from 模块名 import 功能名
  • from 模块名 import *
  • import 模块名 as 别名
  • from 模块名 import 功能名 as 别名
    1.1.2 导入方式详解
    1.1.2.1 import
  • 语法
#1.导入模块
import 模块名
import 模块名1,模块名2....

#2.调用功能
模块名.功能名()
  • 体验
import math
print(math.sqrt(9))    # 3.0

调用模块,代码实现如下所示:

#需求:math模块下sqrt()   开平方计算
"""
1.导入模块
2.测试是否导入成功;调用该模块内的sqrt功能
"""
#方法一:import 模块名;调用模块:模块名.功能名
import math
print(math.sqrt(9))

调用模块,代码实现展示
运行结果:
在这里插入图片描述

335_导入模块之方法二

1.1.2.2 from … import …

  • 语法
from 模块名  import 功能1,功能2,功能3....
  • 体验
from math import sqrt
print(sqrt(9))

第二种方法导入模块,代码实现如下所示:

# 方法二:from 模块名 import 功能1,功能2.....;功能调用(不需要书写模块名.功能名)
from math import sqrt
print(sqrt(9))

第二种方法导入模块
运行结果:
运行结果

336_导入模块之方法三

1.1.2.3 from…import *

  • 语法
from 模块名 import *
  • 体验
from math import *
print(sqrt(9))

第三种方法导入模块,代码实现如下所示:

#方法三:from 模块名 import *;功能调用(不需要书写模块名.功能名)
from math import *
print(sqrt(9))

第三种方法导入模块
运行结果:
运行结果

337_定义别名

1.1.2.4 as定义别名

  • 语法
#模块定义别名
import 模块名  as 别名

#功能定义别名
from 模块名  import 功能  as 别名
  • 体验
#模块名
import time as tt

tt.sleep(2)
print('hello')

#功能别名
from time import sleep as sl
sl(2)
print('hello')

定义别名后,原模块名将会报错,无法使用,代码显示如下所示:

#需求:运行后暂定2秒再打印hello
"""
1.导入time模块或导入time模块的sleep功能
2.调用功能
3.打印hello
"""

#1.模块别名
import time as tt
#tt.sleep(2)
time.sleep(2)  #定义别名后,原模块名将会报错,无法使用
print('hello')

定义别名后,原模块名将会报错,无法使用
运行结果:
运行结果
给功能起别名,调用模块,代码实现如下所示:

#需求:运行后暂定2秒再打印hello
"""
1.导入time模块或导入time模块的sleep功能
2.调用功能
3.打印hello
"""

#1.模块别名
# import time as tt
# #tt.sleep(2)
# time.sleep(2)  #定义别名后,原模块名将会报错,无法使用
# print('hello')

#2.功能别名
from time import sleep as sl
sl(2)
print('hello')

给功能起别名,调用模块
运行结果:
运行结果

338_了解制作模块

1.2 制作模块
在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说自定义模块名必须要符合标识符命名规则。

339_制作模块之定义模块

1.2.1 定义模块
新建一个Python文件,命名为my_module.py,并定义testA函数。

def test(a,b):
	print(a + b)

制作第一个模块文件,代码实现如下所示:

#需求:一个函数  完成任意两个数字的加法运算
def testA(a,b):
    print(a + b)

制作第一个模块文件

340_制作模块之测试和调用模块

1.2.3 测试模块
在实际开发中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发人员会自行在py文件中添加一些测试信息,例如:在my_module1.py文件中添加测试代码。

def testA(a,b):
	print(a + b)

testA(1,1)

此时,无论是当前文件,还是其他已经导入了该模块的文件,在运行的时候都会执行testA函数的调用。
解决办法如下:

def testA(a,b):
	print(a + b)

#只在当前文件中调用该函数,其他导入的文件内不符合该条件,则不执行testA函数调用
if __name__ == '__main__':
	testA(1,1)

制作模块之测试,代码实现如下所示:

#需求:一个函数  完成任意两个数字的加法运算
def testA(a,b):
    print(a + b)

#测试信息
#testA(1,1)

print(__name__)#如果name的运行是在自己当前文件里面,那么它的取值就是带下划线的__main__,
# 如果name的调用不是在当前文件里面,得到的结果将是

制作模块之测试
运行结果:
运行结果
修改测试代码,情况展示如下所示:

#需求:一个函数  完成任意两个数字的加法运算
def testA(a,b):
    print(a + b)

#测试信息
#testA(1,1)

print(__name__)#如果name的运行是在自己当前文件里面,那么它的取值就是带下划线的__main__,
# 如果name的调用不是在当前文件里面,得到的结果将是

#__name__是系统变量,是模块的标识符,它的值分为两种情况;如果是自身模块值是__main__,否则值是当前默模块的名字
if __name__ == '__main__':
    testA(1,1)

修改测试代码
运行结果:
运行结果

341_了解模块定位顺序

1.3 模块定位顺序
当导入一个模块,Python解析器对模块位置的搜索顺序是:
1.当前目录
2.如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
3.如果都找不到,python会查看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
注意:

  • 自己的文件名不要和已有模块名重复,否则导致模块功能无法使用
  • 使用from 模块名 import 功能名的时候,如果功能名字重复,调用到的是最后定义或导入的功能。

342_模块定位顺序之注意点1

自己的文件名不要和已有模块名重复,否则导致模块功能无法使用。

#1.自己的文件名不能和已有模块名重复,如果重复导致模块无法使用 —— random
import random
num = random.randint(1,5)
print(num)

*自己的文件名不要和已有模块名重复,否则导致模块功能无法使用
运行结果:
运行结果

343_模块定位顺序之注意点2

使用from 模块名 import 功能名的时候,如果功能名字重复,调用到的是最后定义或导入的功能。


#2.当使用from  模块名 import 功能名,导入模块功能的时候,如果功能名字重复,导入的功能名是后定义或后导入的同名功能
#场景 time.sleep()
from time import sleep

#定义函数   sleep
def sleep():
    print('我是自定义的sleep')

sleep(2)

使用from 模块名  import  功能名的时候,如果功能名字重复,调用到的是最后定义或导入的功能
运行结果:
运行结果
如果功能名字重复,调用的是后写的功能名,代码实现如下:

#2.当使用from  模块名 import 功能名,导入模块功能的时候,如果功能名字重复,导入的功能名是后定义或后导入的同名功能
#场景 time.sleep()
def sleep():
    print('我是自定义的sleep')

from time import sleep

#定义函数   sleep
# def sleep():
#     print('我是自定义的sleep')

sleep(2)

如果功能名字重复,调用的是后写的功能名
运行结果:
运行结果

344_拓展:名字重复的严重性

#拓展:名字重复
#问题:import  模块名  是否需要担心功能名字重复的问题 -- 不需要
import time
print(time)

time = 1
print(time)

#问题:为什么变量也能覆盖模块? -- 在python语言中,数据是通过引用来传递的。

名字重复的严重性
运行结果:
运行结果

345_all列表

1.4 all
如果一个模块文件中有__all__变量,当使用from xxx import *导入时,只能导入这个列表中的元素。

  • my_module1模块代码
__all__ = ['testA']

def testA():
	print('testA')

def testB():
	print('testB')
  • 导入模块的文件代码
from my_module1 import *
testA()
testB()

如果一个模块文件中有__all__变量,当使用from xxx import *导入时,只能导入这个列表中的元素。

#定义多个功能,把某个功能添加到__all__
__all__ = ['testA']

def testA():
    print('testA')

#因为testB函数没有添加到all列表,只有all列表里面的功能才能导入
def testB():
    print('testB')

如果一个模块文件中有__all__变量,当使用from xxx import *导入时,只能导入这个列表中的元素。
如果一个模块文件中有__all__变量,当使用from xxx import *导入时,只能导入这个列表中的元素。
运行结果:
运行结果
如果一个模块文件中有__all__变量,当使用from xxx import *导入时,只能导入这个列表中的元素。
运行结果

346_了解包

二、包
包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py文件,那么这个文件夹就称之为包。

347_制作包

2.1 制作包
[NEW] – [Python Package] – 输入包名 – [OK] – 新建功能模块(有联系的模块)。
注意:新建包后,包内部会自动创建__init__.py文件,这个文件控制着包的导入行为。
2.1.1 快速体验
1.新建包mypackage
2.新建保内模块:my_module1 和 my_module2
3.模块内代码如下

#my_module1
print(1)

def info_print1():
	print('my_module1')

#my_module2
print(2)

def info_print2():
	print('my_module2')

348_导入包之方法一

2.2 导入包
2.2.1 方法一

import 包名.模块名
包名.模块名.目标

2.2…1.1 体验

#方法一
"""
1.导入
import 包名.模块名
2.调用功能
包名.模块名.功能名()
"""
#导入mypackage包下的模块1,使用这个模块内的info_print1函数
import mypackage.my_module1
mypackage.my_module1.info_print1()

包名.模块名.目标
运行结果:
运行结果

349_导入包之方法二

2.2.2 方法二
注意:必须在__init__.py文件中添加__all__ = [],控制允许导入的模块列表。

from 包名 import *
模块名.目标

导入包之方法二,代码实现如下所示:

#方法一
"""
1.导入
import 包名.模块名
2.调用功能
包名.模块名.功能名()
"""
#导入mypackage包下的模块1,使用这个模块内的info_print1函数
# import mypackage.my_module1
# mypackage.my_module1.info_print1()

#方法二:注意设置__init__.py文件里面的all列表,添加的是允许导入的模块
"""
from 包名  import *
模块名.目标

"""
from mypackage import *
my_module1 .info_print1()

导入包之方法二
修改__init__文件中的all列表参数,代码实现如下所示:

修改__init__文件中的all列表参数
运行结果:
运行结果

350_模块和包的总结

三、总结

  • 导入模块方法
import 模块名
from 模块名 import 目标
from 模块名  import *
  • 导入包
import 包名。模块名
from 包名 import *
  • all = []:允许导入的模块或功能列表
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

陌上花开,静待绽放!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值