• 迭代器,闭包,递归


    迭代器

    函数名的使用

    函数名可以当作值赋值给变量

    函数名可以当作元素放到容器里

    返回函数名的时候不能加()

        return aa

    func()

    func()的作用变成aa() 返回去执行aa函数

    1 def func():
    2     def aa():
    3         print(2)
    4         return None
    5     return aa()  # return None
    6 func() # func() == None
    7 输出值是 2
    8 return aa()
    9 先调用aa函数 return返回值是aa函数的返回值

    闭包

    1.首先有一个嵌套函数

    2.在嵌套函数内部的函数使用外部(非全局)的变量

    满足这两点要求的函数就是闭包

    print(函数名.__closure__)    输出结果不是None就是闭包

    可以将函数名当作返回值返回,在全局调用

    python中,闭包会进行内存驻留,而普通函数在执行后用完了就销毁了

    全局里存放会有污染和不安全的现象

    装饰器的本质是闭包

    闭包的弊端:会出现内存泄漏

    def func():
        name = 'eva'
        def inner():
            print(name)
            print(inner.__closure__)   #有cell  所以是闭包
        return inner
    func()()
    简单的闭包

    迭代器

    可迭代对象

    可以被for循环的就是可迭代对象

    python协议  具有__iter__方法的就是可迭代对象

    创建一个迭代器

    a = 对象.__iter__

    具有__iter__ 和  __next__方法的就是一个迭代器

    1 li = [1,2,3]
    2 a = li.__iter__()
    3 print(a.__next__())
    4 print(a.__next__())  #一个一个取
    5 print(a.__next__())

    迭代器特性

    惰性机制  一行一行往下走

    不能从下向上走

    一次性的 用完就没了

    for循环的机制就是迭代器

     1 li = [1,2,3,4,6,7,87,8,9,90,0,0,0,0,8,7,7,67,]
     2 em = li.__iter__()
     3 while 1:
     4     try:
     5         print(em.__next__())
     6 
     7     except StopIteration:
     8         break
     9 
    10 try 和 except是用来排错的  如果程序报错执行except下面的break

    递归

    两点要求:自己调用自己本身    有明确结束条件

    def func(n):
        n+=1
        print(n)
        if n == 5:
            return
        func(n)
    func(2)
    输出结果为
    3
    4
    5

    递归的效率比较低,尾递归的用时和for的用时是一样的,比for慢

    递归的应用场景:

    在不明确要循环的次数的时候,可以用递归

    递归操作文件目录

  • 相关阅读:
    循环语句 for , forin , forEach
    Haxe
    Haxe数据类型
    jango中间件的使用
    python的遍历模式
    python文件读写
    python3.5以上自带的虚拟环境在各种环境下的使用方法
    冒泡排序
    工厂方法模式
    redis 配置
  • 原文地址:https://www.cnblogs.com/biulo/p/10538678.html
Copyright © 2020-2023  润新知