• 迭代器生成器


    迭代器

    1.迭代器就是迭代的工具,迭代也可以说成是重复,并且每一次重复都是基于上一次的结果而来的,在python中一切皆对象.
    2.可迭代对象:只要拥有__iter__方法的对象都是可迭代对象.
    3.可迭代的对象有:python内置的str list tuplie dict set file 都是可迭代对象

    • 特点:内置有__iter__方法的都叫可迭代的对象

    迭代器对象

    1.迭代器对象的概念

    • 可迭代的对象执行__iter__方法得到的返回值,并且可以迭代对象会有一个__next__方法,并且 文件本身就是迭代器对象
      总结
      1.可迭代对象:拥有iter方法的对象就是可迭代对象 推导:可迭代对象不一定是迭代器对象
      2.迭代器对象:拥有iter方法和next方法的就是可以迭代对象, 推导:迭代器对象一定是可迭代对象
      3.文件即是可迭代对象,也是迭代器对象
      缺点:取值麻烦,只能一个一个取,并且只能往后取,值取了就没了
      无法使用len()方法获取长度

    for 循环原理

    • for 循环称为迭代器循环,in后必须是可迭代的对象
      解释:因为迭代器使用 __ iter__后还是迭代器本身,因此for循环不用考虑in后的对象是可迭代对象还是迭代器对象,

    三元表达式

    条件成立时返回值if条件else条件不成立时的返回值
    
    x=10
    y=20
    x if x>y else y
    

    列表推导式

    [i for i in range(10)]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    字典生成式

    print({i: i**2 for i in range(10)})
    
    {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
    

    zip方法

    res = zip('abcd',[1,2,3,4])
    dic = dict()
    for k,v in res:
        dic[k] = v
    
    print(dic)
    # 方法二
    print({k:v for k,v in zip('abcd',[1,2,3,4])})
    

    生成器表达式

    • 把列表推导式的[]换成(),就是生成器表达式
    • 优点:省内存,一次只产生一个值在内存中
    • 列表推导式相当于直接给你一筐鸡蛋,而生成器表达式相当于给你一只老母鸡
    # 列表推导式
    with open('52.txt', 'r', encoding='utf8') as f:
        nums = [len(line) for line in f]
    
    print(max(nums))
    
    # 生成器表达式
    with open('52.txt','r',encoding='utf8') as f:
        nums = (len(line) for line in f)
    
    print(max(nums)) # ValueError: I/O operation on closed file.
    

    yield

    yield的英文单词意思是生产,在函数中但凡出现yield关键字,再调用函数,就不会继续执行函数体代码,而是会返回一个值。

    def func():
        print('from 1')
        yield
        print('from 2')
        yield
    

    函数递归

    函数的嵌套调用时:函数嵌套函数,函数的递归调用:它是一种特殊的嵌套调用,但是它在调用一个函数的过程中,又直接或间接的调用了它本身
    
    def foo():
        print('from foo')
        foo()
    
    foo()  # 进入死循环
    
    如果递归函数不断的调用函数自身,那么这个递归函数将会进入一个死循环,因此我们应该给递归函数一个明确的结束条件
    

    1.直接调用:直接在函数内部调用函数自身
    2.间接调用:不在原函数体内调用函数自身,而是通过其他的方法间接的调用函数自身

    • 递归必须要有的两个明确阶段
      1.递推:一层一层递归调用下去,进入下一层递归的问题规模都将会减小
      2.回溯:递归碧玺要有一个明确的结束条件,找满足该条件开始一层一层回溯
      3.递归的精髓在于通过不断的重复逼近一个最终的结果
  • 相关阅读:
    【总结】java 后台文件上传整理
    【很重要】优秀的常用的js库
    封装常用的跨浏览器的事件对象EventUtil
    [H5表单]一些html5表单知识及EventUtil对象完善
    [H5表单]html5自带表单验证体验优化及提示气泡修改
    html5的audio实现高仿微信语音播放效果
    pcre
    tony_nginx_01_如何在linux系统下安装nginx、pcre、zlib、openssl工具
    Linux中编译、安装nginx
    Linux在本地使用yum安装软件
  • 原文地址:https://www.cnblogs.com/bladecheng/p/10969534.html
Copyright © 2020-2023  润新知