【0815 | Day 16】模块及模块的四种形式/import和from..import/循环导入/模块的搜索路径/python文件的两种用途/random模块
模块
模块就是一个py文件, 这个py文件有一大堆函数
模块的四种形式
- 自定义模块,common.py就叫做common模块
- 第三方模块: 需要自己安装 13万个第三方库 ,无所不能,写库(弄得更简单)
- 内置模块: python解释器自带的,不需要安装
- 包--> 含有_inti_.py的文件夹,一种特殊的模块(解决了一个问题)
import 与from...import...
import
- 以time模块为例,打开time.py文件
- 用Python解释器运行解释time.py文件,然后把得到的名字放入一个time模块的名称空间
- test.py会有一个变量名time指向time模块的名称空间/变量名t指向time模块的名称空间
#test.py
import time
import time as t #变量名t指向time模块的名称空间
from time import sleep
from time import sleep,localtime
from...import...
- 以time模块为例,打开time.py文件
- 用Python解释器运行解释time.py文件,然后把得到的名字放入一个time模块的名称空间
- test.py会有一个变量名sleep指向time模块名称空间中的sleep名字
# *受__all__=['']
#test.py
__all__ = ['f1','f2']
def f1():
print(1)
def f2():
print(2)
def f3():
print(3)
from test import *
test.f3() #无法运行
import test
test.f3() # 3
循环导入
#m1.py
from m2 import y
x = 10
#m2.py
from m1 import x
y = 20
过程:m1.py --> m2.py --> m1.py ...
结果:x/y在这个过程中一直没有生成
解决方案一
#m1.py
x = 10
from m2 import y
#m2.py
y = 20
from m1 import x
过程:m1.py --> x = 10 --> m2.py --> y = 20 --> m1.py --> x = 10
结果:x = 10 --> y = 20 --> x = 10
解决方案二
#m1.py
def f1():
from m2 import y
print(y)
x = 10
#m2.py
def f1():
from m1 import x
y = 20
过程:f1() --> m2.py --> y = 20
结果:y = 20
模块的搜索路径
-
先从内存中寻找
from m2 import y print(y) import time time.sleep(10) # 10s内删除了m2 from m2 import y print(y)
-
再从内置中寻找
from time import time print(time)
-
然后从自定制寻找
x = 10
-
最后从环境变量中寻找
import sys print(sys.path) # 环境变量,模块就是在某个路径中,需要添加路径,在这里找 sys.path.append(r'D:\上海Python11期视频\python11期视频\day 16') # del sys.path[1] print(sys.path) import testt testt.f1()
Python文件的两种用途
- 作为模块文件(m1.py中调用m2.py,运行m1.py时,m2.py即为模板文件),模块可以有多个
- 作为执行文件( 当前运行的文件),执行文件只有一个
- 执行文件和模块文件是相对的
# m1.py
x = 10
if __name__ == '__main__':
print(x)
#m2.py
import m1
当运行m1.py时,即m1.py作为执行文件,此时 _name_==== _main_==,打印x
当运行m2.py时,即m1.py作为模板文件,此时_name_==== m1==,if条件不成立,报错
random模块
import random
# 大于0且小于1之间的小数
print(random.random())
0.42866657593385415
# 大于等于1且小于等于3之间的整数
print(random.randint(1, 3))
3
# 大于等于1且小于3之间的整数
print(random.randrange(1, 3))
2
# 大于1小于3的小数,如1.927109612082716
print(random.uniform(1, 3))
2.1789596280319605
# 列表内的任意一个元素,即1或者‘23’或者[4,5]
print(random.choice([1, '23', [4, 5]]))
[4, 5]
# random.sample([], n),列表元素任意n个元素的组合,示例n=2
print(random.sample([1, '23', [4, 5]], 2))
['23', 1]
lis = [1, 3, 5, 7, 9]
# 打乱l的顺序,相当于"洗牌"
random.shuffle(lis)
print(lis)
[9, 1, 5, 7, 3]