python学习第四章-迭代器与生成器

迭代器与生成器

迭代器

可以记住遍历的位置的对象
iter()创建迭代器对象,next(iter)下一个对象

迭代器创建

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
 
  def __next__(self):
    if self.a <= 20:
      x = self.a
      self.a += 1
      return x
    else:
      raise StopIteration
 
myclass = MyNumbers()
myiter = iter(myclass)

使用 m = (i for i in range(0,15))也可以创建

生成器

在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象。
以下实例使用 yield 实现斐波那契数列:

#!/usr/bin/python3 
import sys 
def fibonacci(n): # 生成器函数 - 斐波那契
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n): 
            return
        yield a
        a, b = b, a + b
        counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成 
while True:
    try:
        print (next(f), end=" ")
    except StopIteration:
        sys.exit()

函数

可更改对象和不可更改对象
必须参数,关键字参数,默认参数,不定长参数
不定长参数

def func(arg1,*arg2)
#以元组形式传递不定长参数
def func(arg1,**arg2)
#以字典形式传递不定场参数

匿名函数

lambda [arg1 [,arg2,…argn]]:expression

#!/usr/bin/python3
 
# 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2
 
# 调用sum函数
print ("相加后的值为 : ", sum( 10, 20 ))
print ("相加后的值为 : ", sum( 20, 20 ))

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块不会引入新的作用域的
global全局变量
nonlocal如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字

#!/usr/bin/python3
 
def outer():
    num = 10
    def inner():
        nonlocal num   # nonlocal关键字声明
        num = 100
        print(num)
    inner()
    print(num)
outer()

输出为

100
100

同时遍历两个或者更多序列,可以使用zip()组合

模块

每个模块都有一个__name__属性,当其值是’main’时,表明该模块自身在运行,否则是被引入。
__双下划线

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值