• 迭代器、三元、列表推导式、字典生成式、生成器生成式、递归


    一、迭代器

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

    1.可迭代对象

    s = 'abc'
    s.__iter__()
    
    lt = [1, 2, 3]
    lt.__iter__()
    
    tup = (1,)
    tup.__iter__()
    
    dic = {'a': 1}
    dic.__iter__()
    
    se = {1}
    se.__iter__()
    
    fw = open('test.txt', 'a+', encoding='utf8')
    fw.seek(0, 0)
    fw.__iter__()

    可迭代对象 Iterable :含有__iter__方法叫做可迭代对象--> 除了数字类型都是可迭代对象 --> 可迭代对象使用__iter__变成迭代器

    迭代器对象 Iterator: 含有__iter__和__next__方法叫做迭代器对象 --> 只有文件是迭代器对象 --> 迭代器使用__iter__依然是迭代器

    可迭代对象不一定是迭代器对象,迭代器对象一定是可迭代对象

    for 循环原理:for循环本质就是一个while循环,只不过是一个一定可控的while循环

    dic_iter = dic.__iter__()  #变成迭代器
    while True:
        try:
            print(dic_iter.__next__()) #超过迭代个数的会报错
        except StopIteration:
            break

    模板:

    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)


    三、列表推导式

    It = []
    for i in range(1,10):
        It.append(i)
    print(It)
    
    列表推导式:
    It = [i for i in range(1,10)]
    print(It)
    
    列表推导式里面的i 可以进行运算
    It = [i*2 for i in range(1,10)]


    四、字典生成式

    zip:相当于是拉链,是迭代器类型

    res = zip([1,2,3],[4,2,3,4,2,3,4,2,3],'abcadsfasdfasdf')
    print(res.__next__())
    print(res.__next__())
    print(res.__next__())
    打印结果为:(1, 4, 'a')
              (2, 2, 'b')
              (3, 3, 'c')


     

    res = zip([1,2,3],[4,2,3,4,2,3,4,2,3])
    dic = {k:v*2 for k,v in res}
    print(dic)
    打印结果为:{1: 8, 2: 4, 3: 6}


    六、生成器

    generator 本质是一个迭代器 ---> 生成器: 本质就是迭代器,生成器就是一个自定义的迭代器

    生成器:含有yield 关键字的的函数叫做生成器

     yield的特征:

    1.暂停函数

    2相当于通过next取值

    def ge():
        yield 3 #一个yield相当于一个next;同时暂停函数,不往下运行
        yield 4
    # print(ge())  # ge()得到一个生成器 --> 生成器本质是迭代器
    
    g = ge()  # 得到一个生成器
    
    # print(g.__next__())
    # print(g.__next__())
    # print(g.__next__())
    def rane(start):
        count = 0
        while count<start:
            yield count
            count +=1
        
    for i in range(3):
        print(i)
    打印结果为:  
    0 
    1 
    2 

     7、递归

    每一次递归,会不会结束函数?不会,并且每一次递归都会开辟内存空间,如果一直开辟内存就炸掉了,所以最多递归1000次,所以真正的递归必须要有退出条件
     

    递归:

    1.函数a内部直接调用函数a本身

    2.必须要有退出条件

    3.递归必须要有规律

    count = 1
    def fun():
        global count
        count+=1
        print(count)    
        if count==5:
           return
        fun()
        
    fun()
    打印结果为:  
    2 
    3 
    4 
    5 

    案例:玉阳 20岁 ; 后面的同学大2岁,后面的后面的同学比后面的同学大2岁; 求第6位同学的年龄

    def age(x):
        if x ==0:
            return 20
        x-=1
        return age(x)+2
       
    res = age(6)
    print(res)
     age = 20
     def age_num(x):
      global age
      age +=2
      x-=1
      if x ==0:
        print(age)
        return
      age_num(x)
    
    age_num(6)
    count = 0
    age = 20
    def age_num(x):
        global age 
        age +=2
        global count
        count +=1
        if count ==6:
            print(age)
            return 
        age_num(x)
    
    age_num(6)
     
  • 相关阅读:
    C库中与时间相关的函数
    读书笔记之: 程序员的自我修养——链接,装载与库(第1,2部分)
    STL中常用的一些算法
    C++ STL中的迭代器技术
    程序员面试宝典2(数据结构与算法)
    C/C++程序员面试宝典2
    读书笔记之: 数据库系统概论(第4版)
    C库中重要字符串函数的简要分析及实例
    程序员求职成功路(3)
    C库中对函数的可变参数的支持
  • 原文地址:https://www.cnblogs.com/fjn839199790/p/11579258.html
Copyright © 2020-2023  润新知