zoukankan      html  css  js  c++  java
  • python 三大器

    三大器

    python 三大器
    迭代器:  有__iter__()和__next__()方法
    生成器:函数中将return换成yield 
    装饰器:闭包的本质
    

    迭代器

    # 迭代器 拥有__iter__()和__next__()方法
    # 先将可迭代对象赋值一个新的变量转成迭代器
    # 每次都返回一个值
    # 一个__next__()对应一个输出结果
    s = "1234"
    new_s = s.__iter__()
    print(new_s.__next__())# 输出1
    print(new_s.__next__())# 输出2
    
    # 变量名 = 可迭代对象
    # 新赋值的变量名 = 变量名.__iter__() # 装成迭代器
    # print(新赋值的变量名.__next__())
    

    生成器

    # 生成器 函数中将return改成yield的函数
    def func():
        print(1)
        yield 2
    g = func()
    print(next(g))
    
    # def 函数名():
    #     print(输出)
    #     yield 返回值
    # 新的函数名 = 调用函数名()
    # print(next(新的函数名))
    
    # yield from 将可迭代对象逐行输出 节省空间
    

    装饰器

    # 闭包
    def func():
        a = 11
        def foo():
            print(a)
        return foo
    ret = func()
    print(ret.__closure__)# 返回内存地址
    
    def func():
        a = 11
        def foo():
            print(a)
        return foo
    func()()
    print(func.__closure__)# 返回None
    
    
    # 递归 不断自己调用自己,有明确终止条件
    def age(n):
        if n == 4:
            return 18
        else:
            return age(n+1)-2
    print(age(1))# 输出12
    
    # 将age"1"的实参传给age"n"形参
    # if 1!=4,执行else
    # else return age(1+1)=2
    # 直到4==4,return18
    # 18反给age(3),18-2=16
    # 一直反age(2),16-2=14  age(1),14-12=12
    # age(1)=12
    
    
    # 装饰器 在不改变源代码和调用方法的基础上增加新功能
    # 将闭包的参数换成函数名
    def func(f):
        def foo(*args,**kwargs):
            print("装饰器")
            return f()
        return foo
    @func
    # @函数名 语法糖 相当于 f=func(f)
    def index():
        print(123)
        return 456
    print(index())
    # 输出 装饰器 123 456
    
    # def 外层函数(参数):
    #     def 内层函数(动态参数,形参):
    #         print()
    #         return 参数()
    #     return 内层函数
    # @外层函数
    # def 源函数():
    #     print()
    #     return
    # print(源函数())
    
    
  • 相关阅读:
    4.回归类算法目标值连续型
    springcloud笔记
    5.聚类算法kmeans
    FastdFS文件系统
    ElasticSearch
    cors解决跨域
    Swagger
    miaosha2:高并发抢购方案
    关于javascript中的constructor与prototype
    eclipse布署项目到weblogic时启动两次的问题
  • 原文地址:https://www.cnblogs.com/zhangshan33/p/11211553.html
Copyright © 2011-2022 走看看