• 神奇语言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
  • 相关阅读:
    CefSharp.v49.0.1浏览器控件完全WPF版,实现禁止弹出新窗口,在同一窗口打开链接,并且支持带type="POST" target="_blank"的链接
    C#动态调用WebService
    WPF实现窗体中的悬浮按钮
    Oracle树结构查询按层级排序
    WPF自定义TabControl样式
    WPF自定义Window窗体样式
    C# 实现图片压缩
    C# 图片反色处理 图片夜间模式
    C#中多线程中变量研究
    EasyNetQ操作RabbitMQ(高级消息队列)
  • 原文地址:https://www.cnblogs.com/zhangguangpei/p/10256430.html
Copyright © 2020-2023  润新知