装饰器:使用装饰函数在函数执行前和执行后分别附加额外功能
使用装饰函数在函数执行前和执行后分别附加额外功能
def
deco(func):
print
(
"before myfunc() called."
)
func()
print
(
" after myfunc() called."
)
return
func
def
myfunc():
print
(
" myfunc() called."
)
myfunc
=
deco(myfunc)
都是一样的
def
deco(func):
print
(
"before myfunc() called."
)
func()
print
(
" after myfunc() called."
)
return
func
@deco
def
myfunc():
print
(
" myfunc() called."
)
装饰起是把函数或者类进行专门处理的闭包,也就是把跟直接这么写相同(myfunc
=
deco(myfunc)
) 对demo函数对输入输出进行处理,不改变原函数
生成器原理:这种一边循环一边计算的机制,下一个元素是通过计算得到的,不是已经存在的
生成器:只要把一个列表生成式的[]
改成()
,就创建了一个generator:
>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x104feab40>
generator的next()
方法:把元素一个一个打印出来
>>> g.next()
0
>>> g.next()
1
>>> g.next()
4
生成斐波拉契数列
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
yield为生成器的关键字,遇到yield代表停止,遇到return 和普通函数一样返回