01 模块回顾
'''
自定义模块
'''
age = 10
def f1():
print('hello')
# 测试函数,在开发阶段,对模块中的功能进行测试
def main():
print(age)
f1()
# 可以快速生成
if __name__ == '__main__':
main()
02 模块2
-
导入模块的多种模式:
- import xxx :导入一个模块的所有成员
- import aaa,bbb... : 一次性导入多个模块的成员。不推荐这种写法,分开写。import os,sys
- from xxx import a : 从某个模块中导入指定的成员。
- from xxx import a,b,c... : 从某个模块中导入多个成员。
- from xxx import * : 从模块中导入所有成员。
-
import xxx 和from xxx import * 的区别
-
第一种方式在使用其中成员时,必须使用模块名作为前缀。不容易产生命名冲突。
# 使用import xxx 导入 import my_module print(my_module.age)
-
第二种方式在使用其中成员时,不用使用模块名作为前缀,直接使用成员名即可。但是容易产生命名冲突。在后定义的成员生效(把前边的覆盖了)
from my_module import age print(age)
-
-
怎么解决名称冲突的问题
- 改用 import xxx 这种方式导入。
- 自己避免使用同名
- 使用别名解决冲突
-
使用别名:alias
-
给成员起别名,避免名称冲突。
# 使用别名避免命名冲突 from my_module import age as a age = 1000 print(age) # 1000 print(a) # 10
-
给模块起别名,目的简化书写。
# 给模块起别名 import my_module as m print(m.age) # 10 m.f1() # hello
-
-
from xxx import * 控制成员被导入
-
默认情况下,所有的成员都会被导入。
__all__
是一个列表,用于表示本模块可以被外界使用的成员。元素是成员名的字符串。# 使用__all__ 控制被导入的成员 __all__ = ['age','age2'] age = 10 age2 = 20 age3 = 30
# 验证__all__控制的成员 from my_module import * print(age) # 10 print(age2) # 20 print(age3) # 报错
-
__all__
只是对 from xxx import * 这种导入方式生效,其余的方式都不生效。
-
-
相对导入
-
针对某个项目中的不同模块之间进行导入,称为相对导入。
-
只有一种模式:
from 相对路径 import xxx
相对路径:包含了点号的一个相对路径。
. 表示的是当前路径。
.. 表示的是父路径。
... 表示的是父路径的父路径
-
# 相对导入同一个项目下的模块 from ..z import zz # 容易向外界暴露zz模块 from ..z.zz import *0
-
03 常用模块:random
此模块提供了和随机数获取相关的方法:
- random.random() : 获取 [0.0,1.0) 范围内的浮点数
- random.randint(a,b) : 获取[a,b]范围内的一个整数
- random.uniform(a,b) : 获取 [a,b) 范围内的浮点数
- random.shuffle(x) : 把参数指定的数据中的元素打乱。参数必须是一个可变的数据类型。
- random.sample(x,k) : 从x中随机抽取k个数据,组成一个列表返回。
import random
# 获取 [0.0,1.0) 范围内的浮点数
print(random.random())
# 获取 [a,b) 范围内的浮点数
print(random.uniform(3,5))
# 获取[a,b]范围内的一个整数
print(random.randint(3,5))
# 把参数指定的数据中的元素打乱。参数必须是一个可变的数据类型。
lst = list(range(10))
random.shuffle(lst)
print(lst)
# 从x中随机抽取k个数据,组成一个列表返回。
t = (1,2,3)
t1 = random.sample(t,len(t))
print(t1)