<代码>生成器
只要在函数体内出现产量关键字,那么再执行函数就不会执行函数代码,会得到一个结果,该结果就是生成器。
生成器就是迭代器。
def foo ():
print(添加)
产生1
打印(“sidhi”)
收益率2
g=foo ()
下一个(g)
res1下(g)=打印(res1)
收益率的功能:
1.产量为我们提供了一种自定义迭代器对象的方法。
2.产量与retuen的区别、产量可以返回多次值,所以函数的暂停与继续的转态由收益率帮我们保存的。
例:范围的编写#范围(1,2)
def酒吧(x, y, z):
而x & lt;=y:
产生x
x z +=g=酒吧(1、10、2)
print (next (g))
案例:编写tail - f错误。日志| grep ' abc '
导入的时间
def foo(文件):
打开(文件,rb) f:
f.seek(0, 2) #光标直接到末尾
而真正的:
行=f.readline () # .readline()每次只读一行
如果线:
屈服线
其他:
time . sleep (0.03)
def grep(线,佩特):
我的线:
我=i.decode (utf - 8)
如果我的父亲:
我屈服
g=grep (foo (“error.log”),“abc”)
旅客:我的
打印(我)
成立表达式形式的用法:
def foo ():
打印(猪' % s ' %名称)
而真正的:
酒吧=#=收益率=?111’
打印(% s是猪% s %(名称、酒吧))
g=foo (abc)
netx (g) #初始化,也可以使用g.send(没有)
然后g.send(),从代码执行到暂停的位置再将值传给收益,与下一样。
g.send (“1111”)
g.send (“2222”)
面向过程编程:过程指的是解决问题的步骤,即先设计框架,基于该思路编写程序,是一种机械式方式。
优点:复杂问题流程化,进而简单化。
缺点:可扩展性差
案例:编写grep rl python/etc
进口操作系统
def init (funce):
def伶猴(* args, * * kawrgs):
g=funce (* args, * * kawrgs)
下一个(g)
返回g
返回伶猴
@init # foo=伶猴
def foo (targrt):
而真正的:
path_a=产量
g=os.wal (path_a) #绝对路径模块
在g a, b, c:
在c: c1
abc_path=r ' % s/% s ' % s (a, c)
targrt.send (abc_path)
@init
def刀(targrt):
而真正的:
abc_path=产量
张开(abc_path rb) f:
targrt.send (abc_path f)
@init
def猫(targrt):
而真正的:
abc_path, f=屈服
f的线:
res=targrt.send ((abc_path、线))
如果res:
打破
@init
def grep (targrt,脑袋):
脑袋=pate.encode (utf - 8)
res=False
而真正的:
abc_path行=收益率res
res=False
如果脑袋:
res=真正的
targrt.send (abc_path)
@init
def打印机():
而真正的:
abc_path=产量
打印(' % s ' % abc_path)
g=foo(刀(cat (grep(打印机(),python))))
g.send (r/home)
代码> >之前