Python讲解,python总结笔记

  Python讲解,python总结笔记

  迭代程序

  本节讨论迭代器。只讨论一个特殊的方法——_ _ ITER _ _这是迭代器规则的基础。

  迭代器规则

  迭代意味着多次重复做某事——就像在循环中做一样。__iter__方法返回迭代器。迭代器是带有next方法的对象。当调用下一个方法时,迭代器将返回它的下一个值。如果调用了下一个方法,但是迭代器没有返回值,将抛出StopIteration异常。

  这里有几个Queponachi的例子,使用迭代器如下:

  班级小谎:

  def __init__(self):

  self.a=0

  self.b=1

  定义下一个(自己):

  self.a,self.b=自我

  回归自我

  def __iter__(self):

  回归自我

  fibs=Fibs()

  对于fib中的f:

  如果f 1000:

  打印f

  Break #因为设置了Break,所以循环在这里停止。

  1597

  内置函数iter可以从iterable对象中获取迭代器。

  it=iter([1,2,3])

  it.next()

  一个

  it.next()

  2

  从迭代器获取序列

  除了在迭代器和可迭代对象上迭代,还可以转换成序列。在大多数可以使用序列的情况下,可以用迭代器来代替。

  等级测试员:

  值=0

  定义下一个(自己):

  self.value=1

  if self.value 10:引发StopIteration

  回归自我价值

  def __iter__(self):

  回归自我

  ti=TestIterator()

  列表(ti)

  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

  建设者

  生成器也称为简单生成器。生成器可以帮助读者编写非常优雅的代码。当然,不使用生成器也可以编写任何程序。

  创建生成器

  创建一个生成器就像创建一个函数一样简单。

  定义展平(嵌套):

  对于嵌套子列表:

  对于子列表中的元素:

  屈服元素

  嵌套=[[1,2],[3,4],[5]]

  #使用for循环

  对于展平(嵌套)中的数量:

  打印编号

  一个

  2

  三

  四

  五

  #或使用列表功能

  列表(平铺(嵌套))

  [1, 2, 3, 4, 5]

  递归生成器

  上面创建的生成器只能处理两级嵌套,两个for循环用于处理嵌套。如果您想处理任何级别的嵌套,该怎么办?比如,你可以为每一层嵌套添加一个For循环,但是你不知道嵌套有多少层,所以你必须使解决方案更加灵活。现在你可以用递归来解决它。

  def fla(aa):

  尝试:

  对于aa中的bb:

  对于fla中的cc(bb):

  产量cc

  除了类型错误:

  产量aa

  List (Fla ([[1],2],3,4,[5,[6,7]],8]) #注意括号有很多级。

  [1, 2, 3, 4, 5, 6, 7, 8]

  调用fla有两种情况:基本情况和需要递归的情况。

  在基本情况下,函数被告知展开一个元素。在这种情况下,for循环将抛出TypeError异常,并且生成将产生一个元素。

  如果列表被扩展,则需要特殊情况处理。程序必须遍历所有子列表,并对它们调用fla。

  -

  上面的方法有一个问题:如果aa是类字符串对象(string、Unicode、UserString等。),那么它就是一个不会引发TypeError的序列,但是你不想在这样的对象上迭代。

  为了处理这种情况,您必须在生成器的开头添加一个check语句。尝试用字符串拼接传入对象,看是否会出现TypeError。这是检查一个对象是否类似于一个字符串的最简单快捷的方法。

  定义展平(嵌套):

  尝试:

  #不要迭代类似字符串的对象

  try:嵌套的“”

  除了类型错误:通过

  否则:引发类型错误

  对于嵌套子列表:

  对于展平中的元素(子列表):

  屈服元素

  除了类型错误:

  产出嵌套

  列表(扁平化([foo ,[bar ,[baz]]))

  [foo , bar , baz]

  如果嵌套“”引发了TypError,它将被忽略。如果没有抛出TypeError,内部try语句将抛出自己的TypeError异常。

  生成器方法

  一个新的生成器属性是在生成器开始运行后为其提供一个值的能力。性能生成器与“外部世界”通信的通道:

  *外部作用域访问生成器的send方法,就像下一个方法一样,只是前者使用一个参数(“消息”sent-any对象)

  *在内部,发电机是暂停的。yield现在用作表达式,而不是语句。换句话说,当生成器重新运行时,yield方法返回一个值,即send方法外部发送的值。如果使用next方法,yield方法将返回None。

  下面的简单示例说明了这种机制:

  定义中继器(值):

  虽然正确:

  新=(收益值)

  如果new不为None:value=new

  r=中继器(42)

  r.next()

  四十二个

  r.send(你好,世界!)

  “你好,世界,”

  另外两种方法的生成器:

  *throw方法(用异常类型、可选值和回溯对象调用)用于在生成器中抛出异常(在yield表达式中)。

  *close方法(调用时不带参数)用于停止生成器。

  否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: