zoukankan      html  css  js  c++  java
  • 函数名应用 闭包 迭代器

    1 函数名就是函数的内存地址

    2 函数名可以当作变量

    # def func1():
    #     print(666)
    # f1 = func1
    # f2 = f1
    # f2()

    3 函数名可以作为函数的参数

    4 函数名可以当作函数的返回值

    5 函数名可以作为容器类类型的元素

    globals()   返回全局变量的一个字典

    locals()  返回当前位置 的局部变量的字典

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

    闭包的作用: 当程序执行时,遇到函数执行,他会在内存中开辟一个空间,局部名称空间

          如果这个函数内部形成了闭包,那么他就不会随着函数的结束而消失。

    迭代器---------------

    对象内部含有_ _iter_ _ 的方法就是可迭代对象 ,可迭代对象满足可迭代协议

    可迭代对象: str  list  dict   tuple   set   range()

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

    方法一:

    dic = {'name':'alex'}
    print('__iter__' in dir(dic))

    方法二:

    from collections import Iterable
    from collections import Iterator
    
    print(isinstance('alex',Iterable))  
    print(isinstance('alex',Iterator))  
    
    print(isinstance('alex',str))

    对象内部含有_ _iter_ _方法并且还有_ _next_ _方法的就是迭代器

    # f = open('register', encoding='utf-8')
    # print('__iter__' in dir(f))
    # print('__next__' in dir(f))
    # print('__iter__' in dir(dict))
    # print('__next__' in dir(dict))

    可迭代对象不能取值,迭代器是可以取值的

    # 可迭代对象 --->(转化成)迭代器 的两种格式
    # lis = [1, 2, 3]  # 可迭代对象
    # # ite1 = lis.__iter__()  # 迭代器  <list_iterator object at 0x0000027A183BFFD0>
    # ite1 = iter(lis)  # 迭代器  <list_iterator object at 0x0000027A183BFFD0>
    # print(ite1)

    迭代器如何取值?   next 一次  取一个值

    # print(ite1.__next__())
    # print(ite1.__next__())
    # print(ite1.__next__())
    # print(ite1.__next__())
    

    1可迭代对象不能取值,迭代器是可以取值的

    2迭代器非常节约内存

    3迭代器每一次只取一个值

    4迭代器是单向的  一条路走到黑

    s1 = 'kfdsjl'
    for i in s1:
        print(i)
     这其实是for循环内部把值取出来的 
    

    1 将可迭代对象转化成迭代器

    2 调用__next__方法取值

    3利用异常处理停止报错

    用while 循环 模仿 for循环内部运行

    while 1:
        try:
            print(iter1.__next__())
        except StopIteration:
            break
    

     

  • 相关阅读:
    使用commonscompress操作zip文件(压缩和解压缩)
    BoneCP的使用
    Struts2多文件上传
    shell 脚本转换 十六进制 十进制 八进制 二进制
    磁盘 I/O 性能监控指标和调优方法
    需求分析的故事——如何练就需求分析的火眼金晴?
    Debian 修改IP地址或DNS
    mysql主从备份
    ThinkPad T400 安装Windows Server 2008详细过程
    debian下,怎么ll命令注册
  • 原文地址:https://www.cnblogs.com/single82/p/9505898.html
Copyright © 2011-2022 走看看