代码改变世界

Python基础2 之3

2017-05-01 22:39  crow!  阅读(211)  评论(0编辑  收藏  举报

1、装饰器

def auth(a):
    print(a)
    def auth(func):
        def wrapper(*args, **kwargs):
            print("hello world {0} ,{1}".format(*args, kwargs))
            return func(*args, **kwargs)

        return wrapper
    return auth


@auth("local")
def dar(par1):
    print("dar %s"%par1)
    return "hello dar"


print(dar("liaowei"))

运行结果:
local
hello world liaowei ,{}
dar liaowei
hello dar

2、迭代器

迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。

特点:

  1. 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容
  2. 不能随机访问集合中的某个值 ,只能从头到尾依次访问
  3. 访问到一半时不能往回退
  4. 便于循环比较大的数据集合,节省内存
>>> a = iter([1,2,3,4,5])
>>> a
<list_iterator object at 0x102113588>
>>> a.__next__()
1
>>> a.__next__()
2
>>> a.__next__()
3
>>> a.__next__()
4
>>> a.__next__()
5

>>> a = (i*2 for i in range(10))
>>> a.__next__()
0
>>> a.__next__()
2
>>> a.__next__()
4
>>> a.__next__()
6
>>> a.__next__()
8
>>> a.__next__()
10
>>> a.__next__()
12
>>> a.__next__()
14
>>> a.__next__()
16

3、生成器generator

定义:一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器 

 

def testyeild (hehe) :
    for i in range(10):
        yield  i*hehe


a = testyeild(4)

print(a.__next__())
print(a.__next__())
print(a.__next__())
print(a.__next__())

运行结果
0
4
8
12