当函数返回时,函数内部的代码停止执行
生成器在返回值可以暂停执行
生成器使用yield语句返回值
在函数体内部,yield与return只能二选一
例如:倒计时
只要还有yield语句还存在,生成器就依然可用,消耗完yield语句后,抛出Stopiteration错误
- >>>def countdown():
- yield 3
- yield 2
- yield 1
- yield "blast off!"
- >>>g = countdown()
- >>>next(g)
- >>>3
- >>>next(g)
- >>>2
- >>>next(g)
- >>>1
- >>>next(g)
- >>>"blast off!"
生成器一般通过for循环调用
例如,修改上例:
- >>>for i in countdown():
- if isinstance(i,int):
- message = "T-" + str(i)
- else:
- message = i
- print(message)
- >>>T-3
- T-2
- T-1
- blast off!
生成器的运用
计算从0到n的所有数的平方和
- >>>def square(n):
- for x in range(n):
- x2 = x ** 2
- yield x2
- >>>sum = 0
- >>>for i in square(3):
- >>> print(i)
- >>> sum += i
-
- >>>sum
- >>>5
yield from语句
例如,生成回文生成器
- >>>def yield_all(x):
- for i in x:
- yield i
-
- >>>def palin(x):
- yield from yield_all(x)
- yield from yield_all(x[::-1])
-
-
- >>>for i in palin([1,2,3,4,5]):
- print(i)
装饰器是接收另一个函数作为参数的特殊函数
Python使@使符号来表示对一个函数使用装饰器
等价于1.使用def关键字定义一个普通的函数
2.对这个函数调用装饰器
3.将原函数的名称赋值给装饰器的返回值