zoukankan      html  css  js  c++  java
  • 博客整理day13

    Python day13

    迭代器

    可迭代对象

    ​ python的一切都是对象,在这对些对象里,但凡有__iter__方法的对象,都是可迭代对象。

    # 除了数字类型,所有数据类型都是可迭代对象
    # 可迭代的对象:Python内置str、list、tuple、dict、set、file都是可迭代对象。
    

    迭代器对象

    ​ 迭代器对象: 含有__iter____next__方法的对象就是迭代器对象

    ​ 迭代器对象的概念:可迭代的对象执行__iter__方法得到的返回值。并且可迭代对象会有一个__next__方法。

    ​ 迭代器的作用 : 提供了不依赖索引取值的手段

    # 不依赖索引的数据类型迭代取值
    dic = {'a': 1, 'b': 2, 'c': 3}
    iter_dic = dic.__iter__()
    print(iter_dic.__next__())
    print(iter_dic.__next__())
    print(iter_dic.__next__())
    # print(iter_dic.__next__())  # StopIteration:
    
    #可迭代对象使用__iter__变成迭代器
    

    for 循环原理

    ​ for循环的本质是一个while循环,只不过它是一个可控的while循环

    ​ for循环称为迭代器循环,in后必须是可迭代的对象。

    def for1(iterable):
        iterator = iterable.__iter__()
        while True:
            try:
                print(iterator.__next__())
            except StopIteration:
                break
    
    for1([1,2,3])
    

    三元表达式

    x = 10
    y = 20
    
    if x > y:
        print(x)
    else:
        print(y)
        
    #print(x) if x > y else print(y)
    # 条件成立走这里 if 条件 else 条件不成立走这里
    

    列表推导式

    lt = []
    
    for i in range(10):
        lt.append(i)
    
    #lt = [i for i in range(10)]  #第一个i可以做运算
    

    字典生成式

    print({i: i**2 for i in range(10)})
    
    # zip()
    res = zip([1,2,3],[4,2,3,4,2,3,4,2,3],'abcadsfasd')  # res是一个迭代器,__next__返回元组
    print(res.__next__())  # type:tuple
    print(res.__next__())  # type:tuple
    print(res.__next__())  # type:tuple
    # print(res.__next__())  # type:tuple
    

    生成器生成公式

    g = (i for i in range(10000000))
    #print(g)
    # for i in g:
    #     print(i)
    
    lt = [i for i in range(10000000)]
    #print(lt)
    
    #列表推导式 定义即为所有值开辟空间
    #生成器生成公式 定义只为迭代器开辟一个空间
    

    生成器

    ​ 生成器: 本质就是迭代器,生成器就是一个自定义的迭代器,含有yield关键字的函数叫做生成器

    yield关键字

    def ge():
        yield 1
        yield 2
        
    g = ge()# 得到一个生成器  # ge()得到一个生成器 --> 生成器本质是迭代器
    print(g.__next__())
    print(g.__next__())
    
    # yield的特性
    
    # 1. 暂停函数
    # 2. 通过next取值
    

    函数递归

    ​ 函数的递归调用:它是一种特殊的嵌套调用,但是它在调用一个函数的过程中,又直接或间接地调用了它自身。

    def foo():
        print('from foo')
        foo()
    
    foo()  # 进入死循环
    

    直接调用

    def a():
        x = 1
        print(x)
        a()
    
    a()
    

    间接调用

    def bar():
        print('from bar')
        foo()
        
    def foo():
        print('from foo')
        bar()
        
    bar()
    

    ​ 递归必须要有两个明确的阶段:

    1. 递推:一层一层递归调用下去,进入下一层递归的问题规模都将会减小
    2. 回溯:递归必须要有一个明确的结束条件,在满足该条件开始一层一层回溯。

    函数递归必须满足的条件:

    1. 函数内部调用函数自己
    2. 必须要有退出条件
    3. 递归必须要有规律
  • 相关阅读:
    Django——form组件和ModelForm
    CDH hadoop的安装
    Vulnhub-靶机-PRIME: 1
    Vulnhub-靶机-SYMFONOS: 5
    sqlilab-Less-21-30-writeup
    Vulnhub-靶机-SYMFONOS: 4
    Vulnhub-靶机-SYMFONOS: 3
    基础汇总-sqlilab-Less-1-20
    sqlilab-Less-13-19 测试writeup
    sqlilab-Less-9-12 测试writeup
  • 原文地址:https://www.cnblogs.com/samoo/p/11579528.html
Copyright © 2011-2022 走看看