生成器和面向编程

  
 <代码>生成器
  只要在函数体内出现产量关键字,那么再执行函数就不会执行函数代码,会得到一个结果,该结果就是生成器。
  生成器就是迭代器。
  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)
   之前

生成器和面向编程