python,eleven day

函数名的应用

1.函数名就是函数的内存地址
2.函数名可以作为变量
def func():
    print(666)
f1 = func1
f2 = f1
f2()
3.函数名可以作为函数的参数
def funcl2():
    print(666)
def fun2(x):
    x()
func2(func1)
4.函数名可以当作函数的返回值
def wraaper():
    def inner():
         print('inner    ')
         rerurn 666
    teturn inner
ret = wraaper()
def func2():
    print('in func2')
def func3(x):
    print('in func3')
    return x
f1 = func3(func2)
f1()
5.函数名可以作为容器类类型的元素
def func1():
    print('in func1')
def func2():
    print('in func2')
def func3():
    print('in func3')
l1 = [func1,func2,func3]
for i in l1:
    i()

像上面的函数名这种,第一类对象。

闭包

内层函数对外层函数的变量(非全局变量)的引用,并返回这样就形成了闭包。

def wraaper():
    name = 'alex'
    def inner():
        print(name)
    print(inner.__closure__)
    inner()
    return inner
wraaper()
闭包的作用

当程序执行时,遇到了函数执行,它会在内存中开辟一个空间,局部名称空间,如果这个函数内部形成了闭包,那么它就不会随着函数的结束而消失。

迭代器

可迭代对象
for i in 'abc':
     print(i)

对象内部含有__iter__方法就是可迭代对象。
可迭代对象满足可迭代协议。
可迭代对象:str, list, dict, tuple,set,range()

判断一个对象是否是可迭代对象

第一种方法:

print('__iter__' in dir(dic))

第二种方法:

from collections import Iterable
print(isinstance('alex',Iterable))
迭代器

对象内部含有__iter__方法且含有__next__方法就是迭代器

print('__iter__' in dir(dict))
print('__next__' in dir(dict))
可迭代对象 VS 迭代器

1.可迭代对象不能取值,迭代器是可以取值的
2.迭代器非常节省内存
3.迭代器每次只会取一个值
4.迭代器单向的,不反复

1.将可迭代对象转化成迭代器
2.调用__next__方法取值
3.利用异常处理停止报错

iter1 = s1.__iter__()
while 1:
    try:
        print(iter1.__next__())
    except StopIteration:
    break
可迭代对象---->(转化成)迭代器
lis = [1,2,3]
itel = lis.__iter__()
print(itel)
迭代器如何取值

next一次,取一个值

print(itel.__next__())

 

猜你喜欢

转载自www.cnblogs.com/study-learning/p/9493366.html