# 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'Usersz00Desktopyrdy.txt', encoding='utf-8') # 注意路径为/,可加r解决,或者直接修改为/ context = f.read() print(context) ''' 测试 test ''' f.close() ''' 文件读取 f.readline() 一行一行读取 ''' f = open(r'C:Usersz03Desktopyrdy.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:Usersz0Desktopyrdy.txt', encoding='utf-8') context = f.readlines() print(context) # ['测试 ', 'test'] f.flush() # 刷新缓冲区 f.close() ''' 文件读取 for循环实现逐行读取 用的比较多 ''' f = open(r'C:Usersz00Desktopyrdy.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:Usersz003Desktopyrdy.txt', mode='w', encoding='utf-8')
f.write("test")
f.flush() # 刷新缓冲区
f.close()
# 批量创建文件
def out(num):
for i in range(num):
path = r'C:Usersz00Desktop est est' + str(i) + '.txt'
f = open(path, 'w')
f.write("test")
f.flush() # 刷新缓冲区
f.close()
out(10)
mode = 'wb' 可以不用指定打开文件的编码,前提:写出文件的时候,指定字符串的编码 等价于下面的写法
f = open(r'C:Usersz00Desktopyrdy.txt', mode='wb')
f.write("静夜思".encode('utf-8'))
f.flush() # 刷新缓冲区
f.close()
f = open(r'C:Usersz00Desktopyrdy.txt', mode='w',encoding='utf-8')
f.write("静夜思")
f.flush() # 刷新缓冲区
f.close()
# 读写模式 mode ="r+" 必须先读后写 且为追加的方式写
f = open(r'C:Usersz00Desktopyrdy.txt', mode='r+',encoding='utf-8')
content = f.read()
print(content)
f.write("李白")
f.flush() # 刷新缓冲区
f.close()
# 推荐的文件操作方式
with open(r'C:Usersz00Desktop est.txt', mode='r+', encoding='utf-8') as f: # 不需要关闭
content = f.read()
print(content)
f.write("李白")