zoukankan      html  css  js  c++  java
  • 神奇语言python 第一类对象 闭包 迭代器

    第一对象:
    查看函数的内存地址   print(函数名)
    函数可以当做值,赋值给变量
    函数可以参数,传递个函数的形参 函数当参数的时候不能加括号
    函数可以当返回值 当返回值的时候不括号
    函数名可以元素存在容器里
    def fn():
        print("我叫fn")
    
    fn()
    print(fn)  # <function fn at 0x0000000001D12E18>    第一对象
    闭包:
    闭包:嵌套函数,内部函数使用外部变量(非全局变量)就是闭包
    闭包好处,
    保护这个变量不被外界修改
    生命周期延长
    节省开辟空间和销毁空间的时间差,提高效率
    def wrapper():
        a = "哈哈" # 不安全的一种写法
        name = "周杰伦"
        def inner():
            print(name) # 在内层函数中使用了外层函数的局部变量
            print(a)
        def ok():
            nonlocal a
            a = 108
            print(a)
        return inner  # 返回函数名
    
    ret = wrapper()
    ret()
    def wrapper():
        name = "周杰伦" # 局部变量常驻与内存
        def inner():
            print(name) # 在内层函数中使用了外层函数的局部变量
        return inner  # 返回函数名
        # inner()
    
    ret = wrapper() # ret是一个内层函数
    ret() # ret是inner, 执行的时机是不确定的, 必须保证里面的name必须存在
     迭代器
        除去整型和布尔值剩下现已知都是

    迭代器: 遵守迭代器的协议 具有__iter__()方法和__next__()方法
    创建一个迭代器 == 可迭代对象.__iter__()
    使用迭代器 == 迭代器.__next__()
    list 列表dict字典 set 集合tupie 元祖都可以
    print(s.__iter__())  # 对象    iterator  迭代器
    print(lst.__iter__())
    print(dict.__iter__({'1':2}))
    print(set.__iter__({'1',2}))
    print(tuple.__iter__(('1',2)))
    print(range.__iter__(range(0,7)))

    迭代器 特点:

    迭代器不能回退
    迭代器是惰性的
    迭代器是一次性的
    #########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,67,7]
    l = lst.__iter__()
    while True:
    try: # 异常捕获
    print(l.__next__())
    except StopIteration:
    break
  • 相关阅读:
    大话设计模式学习笔记简单工厂 工厂 抽象工厂
    910月总序(update 1)
    虚表思考再探虚表布局
    深入浅出 (代码+图示)递归反转一个栈 lp 专题讲解
    算法导论笔记 二叉查找树问题
    叹 尽然把vs2008 crash!!
    关于二叉查找树的讨论+ 我的误解
    算法情景分析 二叉排序树 前驱+后缀 测试用列
    iBatis.NET中使用时间的注意事项
    JDK和JRE官方下载地址
  • 原文地址:https://www.cnblogs.com/zhangguangpei/p/10256430.html
Copyright © 2011-2022 走看看