迭代器:
可迭代对象:生成器(range)是Iterator 而list tuple dict set str是Iterable 把他们转换成Iterator可以用iter()函数 可以用for进行循环取到 可以用next()进行取值
使用isinstance("xxx",Iterable) 判断xxx是否是可以迭代
闭包:
def test():
pass
b=test
b()也指向test内存空间 ,可以调用test()
def test(number):
def test_in():
print number+100 #内部定义了一个方法并且调用了外部的变量 这种方式叫做闭包
return test_in
ret=test(100) # 此时ret指向test_in()
ret() #print 200
装饰器:(语法糖)
def w1(func):
def inner():
print "验证阶段"
func()
return inner
def f1():
print "_____f1____"
def f2():
print "______f2____"
f1=w1(f1)
f1() #这样在没有改变f1()调用的时候就能给每个被调用函数加上验证代码
装饰器方法
@w1 #这样的方法等价于f1=w1(f1)
def f1():
print "_____f1____"
多个装饰器的时候;
@w1
@w2 #先装饰下面的w2 先把f1装饰一遍成为新的f1 然后通过@w1再装饰一遍成为又一个f1
def f1():
print "_____f1____"
python解释器执行到@w1的时候就开始装饰,而不是等到调用的时候装饰
如果f1有参数 那么装饰方法的内部方法也必须有参数,内部参数对于外界参数的调用也需要有参数
不定长参数的话 上面添加参数的地方添加*arg,**args即可
当有被装饰方法有返回参数的时候,需要在内部类调用函数的时候需要有返回值和return
通用装饰器:
def func(functionName):
def func_in(*arg,**kwargs):
ret=functionName(*arg,**kwargs)
return ret
return func_in