模块的四种形式
模块就是一个py文件, 这个py文件有一大堆函数
# 1. 自定义模块,common.py就叫做common模块
# 2. 第三方模块: 需要自己安装 13万个第三方库 ,无所不能,写库(弄得更简单)
# 3. 内置模块: python解释器自带的,不需要安装
# 4. 包--> 含有__inti__.py的文件夹,一种特殊的模块(解决了一个问题)


import和from import



python看成一个手机,pip是应用管家,time就是应用管家里的一个应用,要用它,import

import 发生的3件事情
1. 在内存中生成一个叫做time的名称空间
2. 运行time.py文件,然后把time.py文件内的名称空间放入time的名称空间内
3. 把time的名称空间指向 import和from...impot.py(当前导入time模块的文件) 的名称空间中

使用import time导入的时候,使用方法只能 time.方法名()  ,不能直接方法名


from time import 发生的3件事情:
from time import gmtime,time
from time import *  # 所有(等同于import time),不推荐使用,因为很容易造成变量名冲突
from test import *  # __all__限制了 from test import *
from test import f3 # __all__不会限制
import test  # __all__ 不会限制
1. 在内存中生成一个叫做time的名称空间
2. 运行time.py文件,让后把time.py文件内的名称空间放入time的名称空间内
3. 把gtime方法指向 import和from...import.py(当前导入time模块的文件) 的名称空间内
循环导入问题
m1.py
from m2 import y  # ImportError: cannot import name 'y'



print(y)
x = 10



m2.py
from m1 import x # ImportError: cannot import name 'x'
print(x)
y=20

运行m1.py
1. 生成一个m2的名称空间
2. 运行m2.py这个文件--> from m1 import x --> 生成一个m1的名称空间 --> 运行m1.py这个文件 --> from m2 import y



以上现象叫做循环导入问题



解决方法:
把出现循环导入的语句,写入函数里,变量写到函数外面
模块的搜索路径:
1. 先从内存中找

from m2 import y
print(y)
import time
time.sleep(10)  # 10s内删除了m2


from m2 import y
print(y)

2. 内置
from time import time
print(time)

3. 自定制

4. 环境变量中  (主要记住未来项目的执行文件一定要弄一个环境变量)
import sys
print(sys.path)  # 环境变量,模块就是在这里找
sys.path.append(r'D:\上海Python11期视频\python11期视频\day 16')

查找顺序:
内存 --> 内置 --> 自定制 --> 环境变量
python 文件的两种用途

from m1 import y



print(y)


执行文件: 当前运行的文件就叫做执行文件

模块文件: m1就是模块文件

执行文件和模块文件是相对的.



random模块
import random

# 最常用的方法
print(random.random())  # 0-1的随机数

print(random.randint(0,100))  # 0-100的整数

lt = [1,2,3,4,5,]
random.shuffle(lt)  # 打乱容器类元素  --> 列表和字典
print(lt)

# 了解

print(random.randrange(1,10))  # 1,9之内的整数

print(random.uniform(1,3))  # 1-3的小数

print(random.choice([1,2,3,'a','b']))  # 选一个

print(random.sample([1,2,3,'a','b'],2))  # 选2个