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
  • 相关阅读:
    有7g和2g的砝码各一个,怎样称可以3次把140g东西分为50g和90g???????
    中缀到后缀(一个例子)
    动态代理模式的使用
    代理模式用来初始化的延迟下载
    ReentrantLock Condition 实现消费者生产者问题
    Two Sum
    [leetcode]重建二叉树(先序和终须) 中序遍和后续
    (转载)旋转数组查找 最简洁方法 总结
    [不明觉厉] 下一个排列
    codeforces -- 283A
  • 原文地址:https://www.cnblogs.com/zhangguangpei/p/10256430.html
Copyright © 2011-2022 走看看