1 def outer(func): 2 #func =原来f1函数 3 def inner(): 4 print('hio') 5 print('hio') 6 print('hio') 7 print('hio') 8 r=func() 9 print('1234214o') 10 print('1234214o') 11 print('1234214o') 12 print('1234214o') 13 14 return r 15 return inner 16 17 @outer 18 def f1(): 19 print('123') 20 21 22 #执行outer函数,并且将下面的函数名单做参数 23 #将outer 的返回值重新给f1=outer 的返回值 24 新f1函数=inner
装饰器再函数执行前后做修饰
=============================================================
装饰器简单调用
def outer(func): return 'LH' @outer def index(): return True >>> print(index) #index变成了一个字符串
装饰器返回函数名
1 def outer(func): 2 3 def inner(): 4 print('123') 5 ret=func() 6 print('234') 7 return ret 8 return inner 9 10 11 @outer 12 def index(): 13 print('feichangfuzahn ') 14 return True 15 16 >>> index() 17 123 18 feichangfuzahn 19 234
只要装饰器被应用,那么函数就会被重新定义,定义为装饰器的内层函数。
装饰器含N个参数的函数
1 def outer(func): 2 def inner(*arg,**kwargs): 3 print('123') 4 r=func(*arg,**kwargs) 5 print('457') 6 return r 7 return inner 8 @outer 9 def index(x1,x2): 10 print(x1+x2) 11 return x1+x2
多个装饰器应用同一个函数例子
1 def out_0(func): 2 def inner(*arg,**kwargs): 3 print(3.5) 4 ret=func(*arg,**kwargs) 5 print('656') 6 return ret 7 return inner 8 9 def out(func): 10 def inner(*arg, **kwargs): 11 print('123') 12 ret = func(*arg, **kwargs) 13 print('456') 14 return ret 15 16 return inner 17 @out_0 18 @out 19 def index(a1,a2): 20 print('buzhidao ') 21 return a1+a2 22 index(1,2)
生成器
一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator);如果函数中包含yield语法,那这个函数就会变成生成器;
def func(): yield 1 yield 2 yield 3 yield 4
利用生成器自定义range
1 def xrange(num): 2 temp = -1 3 while True: 4 temp = temp + 1 5 if temp >= num: 6 return 7 else: 8 yield temp 9 >>> r=xrange(6) 10 >>> r.__next__() 11 0 12 >>> r.__next__() 13 1 14 >>> r.__next__() 15 2 16 >>> r.__next__() 17 3 18 >>> r.__next__() 19 4 20 >>> r.__next__() 21 5 22 >>> r.__next__()
>>> for i in xrange(6):
print(i)
迭代器
迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退。另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件
特点:
- 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容
- 不能随机访问集合中的某个值 ,只能从头到尾依次访问
- 访问到一半时不能往回退
- 便于循环比较大的数据集合,节省内存
>> a = iter([1,2,3,4,5])
>>> a<list_iterator object at 0x101402630>>>> a.__next__()1>>> a.__next__()2>>> a.__next__()3>>> a.__next__()4>>> a.__next__()5>>> a.__next__()Traceback (most recent call last): File "<stdin>", line 1, in <module>StopIteration

浙公网安备 33010602011771号