python⽥字格函数简化代码_[Python]使⽤⽣成器来简化代码原本只是⼤概知道⽣成器是什么,但⼀直不知道怎么⽤,或是什么情景下⽤,后来才发现:
在需要⼀边读数据⼀边处理任务时,如果直接为每个任务都写⼀个函数,那么读数据的部分就要在每个函数都重复⼀遍
直接将所有任务都写在⼀起不现实,尤其是当任务⽐较多时,⼀旦有时候忘记注释某个任务,可能会影响之后的任务
之后突然想到 yield 这个python关键字,可以将读数据的部分抽出来,写作⼀个⽣成器,在任务函数的部分只需⽤for循环逐个访问即可
简要理解:
yield : 返回⼀个值,并且记住这个返回的位置,下次迭代就从这个位置后(下⼀⾏)开始。
不同于return,⼀旦return则意味着函数已经执⾏完毕,⽽yield则只是暂时停在这⾥,之后当再次调⽤这个函数时会返回下⼀个迭代值。
下⾯给出⽤⽣成器的例⼦
#An example for using generator
'''
Not using generator, just repeating the file reading operation at every function.
'''
#write an extra 'hello' at each line in file 'f_source', then save it to file 'f_target'
def write_extra(f_source):
f_target = ''
with open(f_source, 'r') as source, open(f_target, 'w') as target:
for line adlines():
target.write(line+'hello'+'\n')
#parse each line in file 'f_source'
#the simplest way is just print it out..
def parse_line(f_source):python怎么读的
with open(f_source, 'r') as source:
for line adlines():
line = line.strip().split()
print(line) #print line as a list split by char ' '
'''
Using generator
'''
def read_file(f_source):
with open(f_source, 'r') as source:
for line adlines():
yield line
def new_parse_line(f_source):
for line in read_file(f_source): line = line.strip().split()
print(line)
def new_write_extra(f_source): f_target = ''
with open(f_target, 'w') as target: for line in read_file(f_source): target.write(line+'hello'+'\n')
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论