模块的四种形式
模块就是一个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个