zoukankan      html  css  js  c++  java
  • 函数名的使用以及第一类对象,闭包,迭代器

    函数名的使用以及第一类对象:

    # 查看函数的内存地址 print(函数名)
    # 函数可以当值,赋值给变量
    # 函数可以参数,传递个参数的形参,函数当参数的时候不能加括号
    # 函数可以当返回值,当返回值的之后不加括号
    # 函数名可以元素存在容器里

     闭包 closure 
     嵌套函数,在嵌套函数内部使用外部变量(非全局变量),(并且一般外部函数的返回值为内部函数)
     好处:保护变量不会被外界修改,函数内使用到的变量延长寿命周期,节省开辟空间和销毁空间(函数每次运行都会开辟空间跟销毁空间)的时间差
    #示例解析:

     def startAt():
     x = 1
    def incrementby(y):
    return x + y
     return incrementby
     a = startAt() # 调用startAt(),返回值是incrementby的函数名,也就是incrementby地址
     print('function',a)
     print('result',a(1))
    print('a.func_name',a.func_name)


     迭代器iterate
    迭代器一定是可迭代的,可迭代的不一定是迭代器.
    可迭代对象:遵守可迭代对象的协议 具有__iter__()方法
    除去整型和布尔值,剩下的都是
    迭代器:遵守迭代器的协议,具有__iter__()和__next__()方法
    创建一个迭代器 == 可迭代对象.__iter__()
    使用迭代器== 迭代器.__next__()

     lst = [1,2,3,4,5]
     l1 = lst.__iter__().__next__()
     l2 = lst.__iter__().__next__()
     l3 = lst.__iter__().__next__()
     l4 = lst.__iter__().__next__()
     l5 = lst.__iter__().__next__()

     #结果全部都是1,因为每次都是生成一个新的迭代器,迭代第一个1.


     迭代器特性:不能回退,惰性机制,一次性的
     怎么查看迭代器还是可迭代对象

     from collections import Iterable,Iterator
     lst = [1,2,3,4,5]
     ll = lst.__iter__()
     print(isinstance(lst,Iterator)) #判断是否是一个可迭代对象
     print(isinstance(ll,Iterable))    #判断是否是一个迭代器
     False
     True


    for 循环的机制 ************

    lst = [1,2,3,4,5]
    count = 0
    l = lst.__iter__()()
    while count < len(lst)
        print(l.__next__())
        count += 1
    
    lst = [1,2,3,4,5]
    l = lst.__iter__()()
    while True:
        try: #异常捕获
            print(l.__next__())
        except StopIteration:
            break
    
    from  collections import Iterable,Iterator
    
    lst = [1,2,3,4,5]
    ll = lst.__iter__()()
    print(isinstance(lst),Iterator)  #判断是否是一个可迭代对象
    print(isinstance(ll),Iterable)     #判断是否是一个迭代器

  • 相关阅读:
    wget命令
    Linux常用命令大全
    centos7 中文乱码问题解决方法
    Linux软件安装的补充
    redis在Linux上的安装
    Linux下tomcat的安装
    Linux常见命令
    Linux下jdk安装过程
    JAVA中日期处理
    JAVA中File类的使用
  • 原文地址:https://www.cnblogs.com/antigeneral/p/10250276.html
Copyright © 2011-2022 走看看