- 函数嵌套执行
# Demo Describe:函数嵌套执行
'''
函数可以作为参数也可作为返回值
    本质:函数名是一个变量名,都指向一个内存地址
'''
# ---------1.观察函数嵌套执行顺序-------------------
def fun1():
    print(123)
    def fun2():
        print(456)
        def fun3():
            print(789)
            def fun4():
                print(101112)
            print(131415)
            fun4()
        print(161718)
        fun3()
    print(192021)
    fun2()
    print(222324)
# fun1()
'''
fun1() 执行结果
    123
    192021
    456
    161718
    789
    131415
    101112
    222324
'''
# ---------2.局部函数的调用-------------------
def funTest1():
    print(123)  # 外部执行
    def funTest2():
        print('局部函数内部处理')  # 内部执行
    print(funTest2)  # <function funTest1.<locals>.funTest2 at 0x0000016D0A0AAF80> 内存地址查看
    return funTest2
# re = funTest1() #面向对象
# print(re) #<function funTest1.<locals>.funTest2 at 0x0000016D0A0AAF80> 内存地址与调用中的内部函数一致
# re() #局部函数内部处理执行
# ---------3.代理模式-------------------
def funTest4():
    print('代理模式')
def funTest3(fun):  # 函数作为参数
    fun()  # 执行
funTest3(funTest4)  # 代理模式
- 生成器
# Demo Describe:生成器
'''
生成器(generator):
    本质上是一个迭代器
    创建生成器的两种方式:
        1.生成器函数
        2.生成器表达式
            (data for if)
    生成器函数:
        1.常用关键字yield
            作用:
                1.返回在生成器函数中定义的数据
                2.分段执行函数中的内容
        2.生成器函数执行时不会执行函数,只会返回生成器
优点:
    节省内存开销,提高程序性能
'''
# start--------1,生成器函数简单示例----------------------
def fun():
    print(123)
    yield 456
# ret = fun()
# print(ret.__next__())
# end--------1,简单示例----------------------
# start--------2,生成器函数使用场景----------------------
'''
每次从大量数据中依次取出部分
'''
def order():
    lst = []
    for item in range(1, 100000):
        lst.append(f'存入第{item}位数据')
        if len(lst) == 50:
            yield lst
            lst = []
ret = order()
print(ret.__next__())  # 1-50
print(ret.__next__())  # 51-100
print(ret.__next__())  # 101-150
# end--------2,使用场景----------------------
# start--------3,生成器表达式简单示例----------------------
gen = (i ** 2 for i in range(10))
print(gen)  # <generator object <genexpr> at 0x0000026BE4AD1A10> 只是迭代器
print(list(gen))  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# end--------3,生成器表达式简单示例----------------------