第一部分
文件迭代器
readline与readlines
- readline每次执行读取文件的下一行,在读取完毕的时候,会返回一个'',print的时候最好使用end='',因为每行结尾本身就有一个\n
f = open(r'F:\a.txt')
f.readline() # import...
f.readline() # a = 2
- readlines执行的时候会把文件的每一行为单位写入到一个列表中
列表的解析
修改列表值的小技巧
l = [x+1 for x in l]
文件中的列表解析
f = open(r'F:\a.txt')
l = f.readline()
l = [x.rstrip() for x in l]
########or#############
l = [x.rstrip() for x in open(r'F:\a.txt')]
扩展的列表解析语法
嵌套了if语句的列表解析
l = [x.rstrip() for x in open(r'F:\a.txt') if x == '\n']
l = [x+y for x in 'soam' for y in 'BC'] # ['sB', 'sC', 'oB', 'oC', 'aB', 'aC', 'mB', 'mC']
第二部分(第二十章)
- 两元素较复杂的列表解析
[(x,y) for x in range(5) if x%2 == 0 for y in range(5) if y%2 ==1] # [(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]
生成器函数yield
- 和返回一个值并退出的常规函数不同,生成器函数自动在生成值的时候挂起并继续函数的执行.因此,他们对于提前计算整个一系列值以及在类中手动保存和恢复状态都很有用.由于生成器函数在挂起时保存的状态包含他们的整个本地作用域,当函数恢复时,它们的本地变量保持了信息并且使其可用
def s1(t):
for i in range(t):
yield i # 函数每次运行到yield的时候会返回一个i的值
return None
t = 5
for i in range(t):
print (s1(t).)
f = list(s1(5))
print(f)
# 生成器的next方法
t = 5
l = s1(t)
for i in range(t):
print (l.__next__()) # 0 1 2 3 4
yield与return的区别
def fuc(s):
for i in s:
return i * 4 # 函数遇到return即会停止运行,返回值为一个值
def func2(s):
for i in s:
yield i*4 # 函数遇到yield就返回指定的值且不会终止运行,返回的是一个迭代器,需要手动接收
g = list(fuc('spam'))
g2 = list(func2('spam'))
print(g,g2)
#['s', 's', 's', 's'] ['ssss', 'pppp', 'aaaa', 'mmmm']