【python学习笔记】复习知识点随机
# zip() 将给定的数据中对应的元素打包成一个元组
m1 = 'abc'
m2 = [10, 20]
m3 = ['red', 'yello']
a = zip(m1, m2, m3) # 将给定的数据中对应的元素打包成一个元组,不等长,以最短的序列为准,返回可迭代对象
print(a) #<zip object at 0x000002759F40B400>
b = list(a) # 存储在列表中
print(b) # [('a', 10, 'red'), ('b', 20, 'yello')]
# zip解压
print(list(zip(*b))) # [('a', 'b'), (10, 20), ('red', 'yello')]
# zip与for配合使用
for m1, m2, m3 in zip(m1, m2, m3):
print(m1, m2, m3)
'''
a 10 red
b 20 yello
'''
# enumerate() 用于一个可遍历对象(列表、字符串 元组)组合为一个带索引的元组,同时列出数据的索引和数据 返回可迭代对象
fruits = ['apple', 'banana', 'peach']
print(enumerate(fruits)) # <enumerate object at 0x0000014A48E8A540>
print(list(enumerate(fruits))) # [(0, 'apple'), (1, 'banana'), (2, 'peach')]
for index, fruits in enumerate(fruits):
print(index, fruits)
'''
0 apple
1 banana
2 peach
'''
2、函数返回值:将信息存入到变量里面,可以返回任何类型的值,包括列表、字典等等,因为返回的是变量,变量的类型可以为任意类型;
3、模块:一个.py文件就是一个模块,里面定义了一些函数和变量,需要使用时直接调用即可;
4、包:是在模块之上,是很多模块的集合;
5、库:具有相关功能模块的集合
6、局部变量和全局变量:
'''函数内部的变量名如果第一次出现,并且出现在=前面,那么这个变量就会被当做局部变量'''
num = 100
def fun():
num = 123 # 局部变量
print(num)
fun() # 123
num = 100
def fun():
num += 100 # num = num + 100
print(num)
fun() # UnboundLocalError: local variable 'num' referenced before assignment
'''函数内部的变量名如果第一次出现,并且出现在=后面,且该变量在全局中已定义,那么在函数内部就会引用该变量'''
num = 100
def fun():
x = num + 100 # num出现在=后面 且在全局中已经定义
print(num, x)
fun() # 100 200
'''局部变量优先原则'''
num = 100
def fun():
num = 200
x = num + 100 # num出现在=后面 且在全局中已经定义
print(num, x)
fun() # 200 300
print(num) # 100
'''将局部变量改为全局变量'''
num = 100
def fun():
global num #将局部变量改为全局变量
num = 200
num += 200
print(num)
fun() # 400
print(num) # 400
7、匿名函数和map函数
'''
map(function, iterable)
函数, 一个或多个序列
'''
data = list(range(0,11))
print(map(lambda x,y:x+y,data,data)) # <map object at 0x00000240DBEEC190>
print(list(map(lambda x,y:x+y,data,data))) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
8、random模块
'''
随机模块random
'''
print(dir(random))
'''
常用方法:randint', 'random', 'randrange', 'sample','choice' 'seed', 'shuffle'
random() 方法返回随机生成的一个实数,它在[0,1)范围内。
random.randint(a,b) 函数返回数字 N ,N 为 a 到 b 之间的数字(a <= N <= b),包含 a 和 b。
random.randrange ([start,] stop [,step]),从给定的范围返回随机项。
seed() 方法改变随机数生成器的种子,可以在调用其他随机模块函数之前调用此函数,本函数没有返回值。
shuffle() 方法将序列的所有元素随机排序。参数lst--列表 返回值None
'''
print(random.random()) #生成0-1之间的随机小数 如:0.7721423968855717
# seed(x)方法,改变随机数生成器的种子,x为任意数字,调用seed后,生成的随机数将会是同一个
random.seed(10)
print(random.random()) # 生成的随机数将会是同一个 0.5714025946899135
print(random.randint(1, 100)) # 生成1-100之内的随机整数: 如 55
print(random.randrange(0, 10, 2)) #生成0-10之内步长为2的随机整数:如 6
print(random.randrange(10)) #生成0-9的随机整数:如 9
print(random.sample('abcdefs' ,3)) # 在目标序列中随机挑选3个 ['e', 'a', 'b']
print(random.choice('abcdefs')) # 在目标序列中随机挑选1个 d
print(random.choices([1,2,3,4,5])) # 在目标序列中随机挑选1个 [5]
list = [20, 16, 10, 5]
print(random.shuffle(list)) # 返回None
print(list) # [16, 20, 5, 10]
9、文件读操作:
'''
文件操作:
1、复制为路径:按住shift键 + 选中文件点鼠标右键 选择复制为路径
2、修改文件的编码方式:文件另存为 选取编码方式 一般为utf-8
3、绝对路径:C:/Users/z00/Desktop/yrdy.txt
4、相对路径(./当前目录下 ../上一层目录下)
'''
'''
文件读取
f.read() 一次读取
flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。
'''
f = open(r'\Users\z00\Desktop\yrdy.txt', encoding='utf-8') # 注意路径为/,可加r解决,或者直接修改为/
context = f.read()
print(context)
'''
测试
test
'''
f.close()
'''
文件读取
f.readline() 一行一行读取
'''
f = open(r'C:\Users\z03\Desktop\yrdy.txt', encoding='utf-8')
context = f.readline()
context1 = f.readline()
print(context.strip()) # 测试
print(context1.strip()) # test
f.flush() # 刷新缓冲区
f.close()
'''
文件读取
f.readlines() 将每一行形成一个元素,置于列表里面
'''
f = open(r'C:\Users\z0\Desktop\yrdy.txt', encoding='utf-8')
context = f.readlines()
print(context) # ['测试\n', 'test']
f.flush() # 刷新缓冲区
f.close()
'''
文件读取 for循环实现逐行读取 用的比较多
'''
f = open(r'C:\Users\z00\Desktop\yrdy.txt', encoding='utf-8')
for line in f:
print(line, end='')
'''
测试
test
'''
f.flush() # 刷新缓冲区
f.close()
10、文件写操作
# 读取pdf文件 rb模式读取pdf文件
f = open(r'E:\A\工具\书籍\金字塔原理.pdf', mode='rb')
context = f.read()
print(context)
f.flush()
f.close()
# 文件写
f = open(r'C:\Users\z003\Desktop\yrdy.txt', mode='w', encoding='utf-8')
f.write("test")
f.flush() # 刷新缓冲区
f.close()
# 批量创建文件
def out(num):
for i in range(num):
path = r'C:\Users\z00\Desktop\test\test' + str(i) + '.txt'
f = open(path, 'w')
f.write("test")
f.flush() # 刷新缓冲区
f.close()
out(10)
mode = 'wb' 可以不用指定打开文件的编码,前提:写出文件的时候,指定字符串的编码 等价于下面的写法
f = open(r'C:\Users\z00\Desktop\yrdy.txt', mode='wb')
f.write("静夜思".encode('utf-8'))
f.flush() # 刷新缓冲区
f.close()
f = open(r'C:\Users\z00\Desktop\yrdy.txt', mode='w',encoding='utf-8')
f.write("静夜思")
f.flush() # 刷新缓冲区
f.close()
# 读写模式 mode ="r+" 必须先读后写 且为追加的方式写
f = open(r'C:\Users\z00\Desktop\yrdy.txt', mode='r+',encoding='utf-8')
content = f.read()
print(content)
f.write("李白")
f.flush() # 刷新缓冲区
f.close()
# 推荐的文件操作方式
with open(r'C:\Users\z00\Desktop\test.txt', mode='r+', encoding='utf-8') as f: # 不需要关闭
content = f.read()
print(content)
f.write("李白")
浙公网安备 33010602011771号