zoukankan      html  css  js  c++  java
  • 10.15 迭代器,生成器到常用模块的小结

    闭包函数

    把函数和变量一起打包拿出去了

    装饰器

    不改变函数体代码,并且不改变函数调用方式,他本质就是一个函数
    装饰器也可以完善装饰器

    三层装饰器

    迭代器

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

    可迭代对象

    具有__iter__方法的对象(python中一切皆对象)

    迭代器对象

    具有__iter____next__方法的对象

    三元表达式

    列表推导式

    字典生成式

    生成器

    自定义的迭代器,有yield关键字的函数只要调用,这个调用后的函数就是生成器

    yield

    接收函数的返回值,但是会继续执行函数代码

    return

    接收函数返回值,但是会终止函数

    递归

    本质上就是函数调用函数本身,必须得有结束条件,并且在递归的过程中,问题的规模必须不断缩小

    匿名函数

    匿名函数使用一次就失效了,一般不单独使用,与max最大值/min最小值/sorted排序/map映射/filter过滤连用

    内置函数

    面向过程编程

    类似于工厂的流水线,机械式的一步一步完成一个项目,把完成步骤具体细分,这样步骤与步骤之间互不干涉
    优点:条理清晰
    缺点:扩展性差,只要一个步骤错,项目就崩溃

    模块的四种形式

    为什么要有模块

    让代码变得更加简洁,清晰,模块化
    一个模块里有多个函数,相当于一个大功能细分成多个小功能

    1. 自定义模块
    2. 第三方模块
    3. 内置模块

    import和from...import

    import time
    1.打开time文件
    2.使用python解释器运行time文件,然后把解释文件得到的名字放入time模块的名称空间
    3.test.py中会有一个time的变量指向time模块的名称空间,如果导入方式为`import time as t`,则就是t变量指向time模块的名称空间
    
    from time import sleep
    1.打开time文件
    2.使用python解释器运行time文件,然后把解释文件得到的名字放入time模块的名称空间
    3.test.py中会有一个sleep变量指向time模块名称空间中的sleep,如果导入方式为`from time import sleep,localtime`,则是由一个sleep变量和一个localtime变量指向time模块的名称空间中的sleep和localtime.
    

    循环导入问题

    为什么会有循环导入问题

    1. m1文件需要导入m2文件的y
    2. m2文件需要导入m1文件的x
    3. 代码自上而下运行,m1需要m2的y,然后会去m2的名称空间找到y,但是找y前,需要运行m2的代码,m2的代码第一句是去m1找x,然后又回去运行m1的代码,m1的第一行代码又是去m2找y
    4. 就是说m1只能运行第一行,m2也只能运行第一行,所以出现了循环导入问题

    解决方案一

    把导入文件的代码放到最后面
    但是这样需要对所有变量都这样做,才能解决问题,所以治标不治本

    解决方案二

    把导入文件写入函数中
    名字的执行顺序:内置(python解释器启动的时候)→全局(文件执行的时候)→局部(函数调用的时候)
    借助执行顺序,可以避免循环导入问题

    模块的搜索路径

    内存→内置模块→环境变量

    python文件的两种途径

    1. 文件模块,被当做模块给导入,有多个
    2. 运行文件,被当做执行文件执行,只能有一个

    .搜索路径以执行文件为准

    ## m1.py
    def f1():
    	print('f1')
    f1()
    
    ## test.py
    import m1
    m1.f1() #会运行两次
    

    __name__

    ## m1.py
    def f1():
    	print('f1')
    
    if __name__ == '__main__': # __name__在m1.py文件被当做模块导入时是模块名,做为执行文件时是'__main__`
    	f1()
    	
    ## test.py
    import m1
    
    m1.f1() #会运行两次
    

    编译python文件(了解)

    为了提高加载模块的速度(提高的是加载速度,不是运行速度)

    模块太大,合理分配模块的函数
    所以得用文件夹管理,文件夹命名为m1,导入m1就是导入m1中的__init__

    软件开发目录规范

    为了提高 程序的可读性和可维护性,我们应该为软件设计良好的目录结构,这与规范的编码风格同等重要,简而言之就是把软件代码分文件目录.

    time模块

    打印三种不同形式的时间,时间戳/格式化时间/结构化时间

    datetime模块

    时间的加减

    random模块

    随机数

    os模块

    与操作系统交互,多用于文件操作

    sys模块

    与python解释器交互,多用于环境变量的配置

    json模块

    序列化

    把数据从内存读入硬盘(以json格式)

    反序列化

    把数据从硬盘读入内存(以json格式)

    平台性质

    可以跨平台可以序列化dict/list/int/float/bool/None数据类型

    pickle模块

    序列化

    把数据从内存读入硬盘(以pickle格式,二进制形式)

    反序列化

    把数据从硬盘读入内存(以pickle格式,二进制形式)

    平台性质

    无法跨平台,但是可以序列化python的任意数据类型

    hashlib模块

    加密

    hmac模块

    加盐加密

    logging模块

    日志模块

    步骤

    创建logger对象
    创建handler对象
    创建formatter对象
    把formatter绑定到handler对象上
    把handler对象绑定到logger对象上
    设置级别
    测试

    numpy模块

    多维数组的运算

    pandas模块

    处理表格/json文件等,数据库

    matplotlib模块

    数据可视化

    re模块

    正则表达式,从文本中匹配特定的内容

    typing模块

    导入python的数据类型

    collections模块

    是python内建的一个集合模块,提供了许多有用的集合类

    pathlib模块(了解)

    是python的内置库

    shutil模块(了解)

    文件的压缩与解压缩,文件的拷贝

    xml模块(了解)

    类似于json模块,做不同程序间的数据交互

    subprocess模块(了解)

    运行子程序,即运行linux命令

  • 相关阅读:
    Assert.isTrue 用法
    P2967 [USACO09DEC]视频游戏的麻烦Video Game Troubles
    最近目标2333
    LibreOJ β Round #2」贪心只能过样例
    CF1062F Upgrading Cities 拓扑排序
    CF1108F MST Unification
    CF915D Almost Acyclic Graph 拓扑排序
    Swift日历控件Calendar
    README.md的markdown语法
    MAC打开App显示已损坏
  • 原文地址:https://www.cnblogs.com/793564949liu/p/11680717.html
Copyright © 2011-2022 走看看