2020.5.25 python基础大复习

发布于 2020-05-25  55 次阅读


Table of Contents

  • keyword.kwlist中查看
  • 代码开头的两行
    • #!/user/bin/env python
      
      
      # -*- coding:utf-8 -*-
      

    • linux下需要制定
  • Python运算符

  • Python数据类型

    • 数字类型

      • 不可变类型,每次赋值变为新的对象
        • 整数 Int

          • 可以看做Long类型
          • 小正数对象池
            • -5-256之间
        • 浮点数 float

          • 小数
        • 复数

          • complex
        • 数学计算方法

          • abs() 返回数字的绝对值
          • ceil() 返回小数进位的整数
          • exp(x) 返回e的x次幂
          • floor() 返回小数的舍位整数
          • max()/min() 返回最大最小整数
          • pow(x,y) x**y的值
          • round(x,[n]) 返回浮点数四舍五入
          • sqrt(x) 返回x的平方根
    • bool类型

      • bool()可以转换为bool值
      • None也不是布尔类型,而是NoneType
    • 列表

      • 内置方法

        • append(obj) 末尾添加新对象
        • count(obj) 统计某个元素在列表中的次数
        • extend(seq) 在列表末尾追加可迭代对象里面的元素
        • index(obj) 找到某个值的索引
        • insert(index,obj) 插入某个值
        • pop(obj=lists[-1]) 默认移除最后一个值
        • remove(obj) 移除列表中某一个值
        • reverse() 列表翻转
        • sort([func]) 对列表排序
        • copy() 赋值列表,浅复制
        • clear() 清空列表
    • 元组

      • 删除插入修改等操作不能做
      • 只保证一级子元素不可变
      • 尽量都使用不可变类型
    • 字符串

      • 字符串是不可变序列

      • 字符串的运算

        • * 乘法操作
        • + 字符串连接(运算速度慢) join()
        • [] 通过索引访问
        • [:] 切片访问
        • in /not in 成员运算符
        • r/R 原始字符串,不转义
      • 常用字符串操作方法

        • encode() 编码bytes
        • decode() 解码字符串
        • find()查找子串
        • index() 获取下标
        • len(string) 字符串长度
        • lower()、upper() 小写大写字符
        • split 分割字符串
        • strip 去除两端指定符号,默认是空格
        • startswith,endswith 字符串开头结尾是否匹配
      • str.format()格式化方法

        • 1.{0}、{1}、{2} 位置参数,引用需要按照顺序
        • 2.{name}{age}{gender} 关键字参数,需要是字典
      • 字符串颜色控制

    • 字典

      • python3.6以后,字典保证了插入的顺序
      • 字典可精确描述为不定长、可变、散列的集合类型
      • 字典的重要方法:
        • clear() 删除字典所有元素
        • copy() 浅复制一个字典
        • fromkeys() 创建一个新字典,返回元素做字典的键
        • get() 获取字典元素
        • items()、keys()、values():返回字典键和值,返回字典键,返回字典值
        • pop(key)删除并返回指定key的值
        • popitem()删除并返回字典最后一个键值对
        • setdefault() 类似get方法,可以有默认值
        • update(dcits) 合并dicts的内容到当前字典
    • bytes

      • 字符串以字符为单位处理,字节串以字节为单位处理
    • set

      • set是一个无序不重复的集
      • 创建空集合要使用set,{}默认是字典
      • set的核心就是自动去重
  • python 内置函数
    • callable()
      • 判断对象是否可以调用,(对象具有__call__方法)
    • chr()
      • Ascii字符编码
    • ord()
      • 返回Ascii十进制
    • bytes()
      • 将对象转换成字节串
    • compile
    • dir()
      • 显示所有对象的属性和方法
    • divmod()
      • 返回商和余数的元组
    • eval()
      • 将字符直接解读执行
      • 有运算直接就算
      • 可以有返回值
    • exec()
      • 执行字符串或者complie方法编译过的字符串,没有返回值
    • globals()
      • 列出所有全局变量
    • locals()
      • 返回当前对象的局部变量
    • hash()
      • 为字符串生成哈希函数
    • help()
      • 对象的帮助文档
    • id()
      • 返回对象的内存地址
      • 经常查看变量引用,对象是否相等
    • isinstance()
      • 判断一个对象是否是某个类的实例
    • issubclass()
      • 判断a是否是b的子类
    • len()
      • 判断对象的长度
    • Iter()
      • 制造一个迭代器
      • 应该就是添加量iter方法
    • next()
      • 调用__next__方法、获取下一个元素
    • max(),min()
      • 返回最大最小,可以指定对象
    • slice()
      • 返回一个切片类型的对象
    • vars()
      • 和dir差不多,把key和value一块返回
    • map(func,list)
      • list的每个元素都调用func函数
      • 可以用来批量的更改list内的值
    • filter()
      • 传递一个迭代对象,一个函数
      • 函数的作用就是返回一个bool,在filter中判断是否返回迭代对象的值
      • ListFindAll
    • zip()
      • 将多个可迭代对象打包成元组
    • sorted()
      • 排序函数
  • Python类和实例

    • 实例变量和类变量

      • 实例变量:生成对象内部的变量,每个对象不一样
      • 类变量:每个对象都可以访问,是公有对象
    • 类方法

      • 实例方法:对象的方法,包含self
      • 静态方法:无默认参数,类调用 @staticmethod
      • 类方法:cls,指代类本身 @classmethod
    • 类方法,类变量,类实例,类实例变量存储

      • 类,类方法,类变量只存储一份,所有实例共享它们
      • 创建实例是,实例中除了封装name,age等,还好保存一个指向类的指针,因此实例可以以找到类,但是类找不到具体的实例
    • 成员保护和访问限制

      • 双下划线 __ 代表私有成员或者方法,
        • 通过set,get来设置
        • 好处是可以限制设置值的类型
      • 单下划线 _ 代表不希望被外部访问
      • 双下划线开头结尾 __name__
        • python中的魔法方法
    • @property和property()函数

      • 将方法伪装为属性调用
      • class Perple:
          def __init__(self,name):
            self.name = name
          @property
          def name():
            return self.age
          @name.setter()
            self.name = name

    • 特殊成员和魔法方法

      • __init__ :      构造函数,在生成对象时调用
        __del__ :       析构函数,释放对象时使用
        __repr__ :      打印,转换
        __setitem__ :   按照索引赋值
        __getitem__:    按照索引获取值
        __len__:        获得长度
        __cmp__:        比较运算
        __call__:       调用
        __add__:        加运算
        __sub__:        减运算
        __mul__:        乘运算
        __div__:        除运算
        __mod__:        求余运算
        __pow__:        幂

  • reflect反射

    • hasattr()、getattr()、setattr()和delattr()
    • 判断对象是否有方法,属性,获取设置删除
      • getattr(obj,name,返回默认对象) 返回属性或者对象
      • setattr(obj,name,属性或者是对象) 没有返回值
      • hasattr() 判断是否有属性或者方法 返回bool
      • delattr() 删除属性或者方法 没有返回值
    • https://www.liujiangblog.com/course/python/48
  • Python模块与包

    • python中分为 代码块 if for等,函数 def ,类 class,模块 py文件,包 带__init__.py的文件夹
    • 模块分为三种,自定义模块,内置模块,第三方模块
    • 包名通常全部为小写,避免使用下划线
    • 导入方法
      • python导入是根据sys.path来导入
        • sys.path.append() 可以添加路径
      • import
      • from xx.xx import xx.xx
      • from xx.xx import xx as 自定义名
      • from xx.xx import * 慎用*来导入,容易模块名冲突
  • Python常用标准库模块

    • os模块

      • 文件目录操作
        • 查看当前目录相关
          • os.getcwd() 获取当前工作目录
          • os.chdir() 改变路径,类似cd
          • os.curdir 当前目录
          • os.pardir 父级目录
        • 建立删除遍历目录
          • os.makedirs(“/path/abc”) 建立多层目录
          • os,removedirs(“/path/abc”) 删除多层目录
          • os.mkdir() 创建单层目录
          • os.rmdir() 删除单层目录
          • os.listdir() 遍历目录下的文件和子目录
          • os.remove() 删除一个文件
          • os.rename() 重命名目录
          • os.stat() 获取文件,目录信息
        • 返回目录
          • os.path.abspath() 返回绝对路径
          • os.path.split() 返回分割的元组,目录和文件名
          • os.path.dirname() 返回path的目录,
          • os.path.basename() 返回path最后的文件名,没有文件名就是空值
          • os.path.exists() 判断目录文件是否存在
          • os.path.isabs() 判断是否是绝对路径
          • os.path.isfile() 判断是不是文件
          • os.path.isdir() 判断是不是文件夹
          • os.path.join() 返回path合成的多个路径
          • os.path.getmtime(path) 返回文件目录最后的修改时间
          • os.path.getsize(filename) 返回文件包含的字符数量
    • sys模块
      • 重要的属性方法
        • sys.argv
        • sys.exit(n) n为0则是正常退出,否则抛出异常SystemExit
        • sys.path 返回模块搜索路径
    • subprocess
      • 用于创建子进程
    • random
      • 用于生成伪随机数
        • random.seed(a=None,version=2)
          • 初始化随机数生成器,默认为系统时间
        • random.getstate()
        • random.setstate(state)
      • 针对整数的方法
        • random.randrange(stop)
        • random.randrange(start,stop[,step])
          • 从range范围选定一个随机数
        • random.randint(a,b)
          • 返回a<=N=b的随机整数N
      • 针对序列类型的方法
        • random.choice()
          • 从非空序列中选取一个元素
        • random.choices()
        • random.shuffle(x[,random])
          • 打乱x内元素的排序,可变序列
        • random.sample(population,k)
          • 打乱x内元素的排序,可变序列
    • bisect
      • 二分查找
    • hashlib
      • 提供多种摘要算法
    • queue
      • 轻量的队列模块
    • fileinput
      • 对标准输入和多个文件逐行遍历
      • 默认从stdin sys.argv[1:]获取
      • 使用方法:
        • fileinput.input(file=(),inplace=True)
          • file 可以是一个元组代表多个要处理的文件
          • inplace 是否修改源文件
          • backup 备份后缀名
          • mode 文件读写模式
        • with fileinput.input(files=('spam.txt', 'eggs.txt')) as f:
              for line in f:
                  process(line)

        • 主要方法
          • fileinput.filename() 当前文件名
          • fileinput.fileno() 文件总行数
          • fileinput.lineno() 当前的行数
          • fileinput.isfirstline() 是否是第一行
          • fileinput.isstdin() 是否是stdin参数
          • fileinput.nextfile() 关闭当前文件,开始下一个文件
          • fileinput.close() 退出
          • import fileinput
            
            with fileinput.input(files="d:\\\\1.txt") as f:
            
                for line in f:
                    line = line.rstrip()
                    num = fileinput.lineno()
                    print("#%d\t%s" % (num, line))

    • shutil
      • shutil可以简单地理解为sh + util,shell工具的意思。shutil模块是对os模块的补充,主要针对文件的拷贝、删除、移动、压缩和解压操作。
    • zipfile
      • zipfile模块提供了通用的创建、读取、写入、附加和显示压缩文件的方法
    • tarfile
      • tarfile模块用于解包和打包文件,包括被gzipbz2lzma压缩后的打包文件。如果是.zip类型的文件,建议使用zipfile模块
    • getpass
      • getpass模块用于输入密码时,隐藏密码字符。
    • json
      • Json是一种轻量的数据交换格式
      • json的数据要求用双引号将字符串引起来,并且不能有多余的逗号
      • json最好是字符串,不要是字节串
      • 类型转换:
        • python转换成json
          • dict——-object
          • list,tuple ——-array
          • str ——-string
          • int,float,int-& folat-derived Enums ——-Number
          • true false ——-True,False
          • null——- None
        • json转换python
          • object ——- dcit
          • array——- list
          • string——- str
          • number(int) ——-int
          • number(real) ——-float
          • true false ——-True,False
          • null ——-None
      • 使用方法
        • dumps(obj), 转换成json
        • loads(obj) 转换成对象
        • dump(str,fp), 转换json放入文件
        • load(fp) 从文件中解析
    • pickle
      • 复杂结构的序列化使用pickple
      • 不可读,只能用于python
      • Pickle可以持久化Python的自定义数据类型,但是在反持久化的时候,必须能够读取到类的定义
      • 使用方法:
        • dumps(obj), 转换成pickle
        • loads(obj) 转换成对象
        • dump(str,fp), 转换pickle放入文件
        • load(fp) 从文件中解析
    • shelve
      • shelve模块以类似字典的方式将Python对象持久化,它依赖于pickle模块,但比pickle用起来简单。
    • time
      • time模块只支持到2038年,datetime
      • python中用三种方法表示时间
        • 时间戳(timestamp) time.time()
        • 格式化的时间字符串(string_time) time.localtime()
        • 结构化时间(struct_time) 时间元祖 time.strftime(‘%Y%m%d’)
      • 格式化时间字符串
        • time.strftime(‘%Y%m%d’) 可以获得格式化的时间字符串(string_time)
      • 常用time方法
        • time.sleep() 睡眠暂停N秒
        • time.time() 返回当前系统时间戳
        • time.localtime([secs]) 将时间戳转换为结构化时间 默认是time.time()
        • time.mktime(t) 将一个结构化时间转换为时间戳
        • time.ctime([secs]) 将时间戳转换为本地时间的格式化字符串
        • time.asctime([t]) 将结构化时间转为格式化字符串
        • time.strftime(fromat [,t]) 返回格式化字符串表示的当地时间
          • t:默认是time.localtime()
        • time.strptime(string[,format]) 将格式化字符串时间转为结构化时间
      • 时间格式转换
        • image.png-23.5kB
        • 方法
          时间戳 UTC结构化时间 gmtime()
          时间戳 本地结构化时间 localtime()
          UTC结构化时间 时间戳 calendar.timegm()
          本地结构化时间 时间戳 mktime()
          结构化时间 格式化字符串 strftime()
          格式化字符串 结构化时间 strptime()
    • datetime
      • 与time模块相比,datetime模块提供的接口更直观、易用,功能也更加强大
      • datetime模块的类
        • datetime.data 日期类
        • datetime.time 时间类
        • datetime.datetime 日期与时间类
        • datetime.timedelta 表示date time datetime之间的时间差
        • datetime.tzinfo 时区相关信息抽象基类
        • datetime.timezone 实现tzinfo的抽象基类
      • https://www.liujiangblog.com/course/python/69
    • timeit
      • timeit模块是Python内置的用于统计小段代码执行时间的模块,它同时提供命令行调用接口
    • logging
      • 任务场景 最佳工具
        普通情况下,在控制台显示输出 print()
        报告正常程序操作过程中发生的事件 logging.info()(或者更详细的logging.debug())
        发出有关特定事件的警告 warnings.warn()或者logging.warning()
        报告错误 弹出异常
        在不引发异常的情况下报告错误 logging.error(), logging.exception()或者logging.critical()
      • logging模块定义了下表所示的日志级别,按事件严重程度由低到高排列(注意是全部大写!因为它们是常量。):
        级别 级别数值 使用时机
        DEBUG 10 详细信息,常用于调试。
        INFO 20 程序正常运行过程中产生的一些信息。
        WARNING 30 警告用户,虽然程序还在正常工作,但有可能发生错误。
        ERROR 40 由于更严重的问题,程序已不能执行一些功能了。
        CRITICAL 50 严重错误,程序已不能继续运行。
      • https://www.liujiangblog.com/course/python/71
  • 4.扩展延伸知识

    • python单例设计模式

      • 设计模式:
        • 前人工作总结和提炼,对某一特定问题成熟的解决方案
        • 使用设计模式为了可重用代码,让他人理解
      • 单例设计模式的应用场景
        • 音乐播放
        • 回收站
        • 打印机
      • __new__方法
        • 使用类名()创建对象,
        • 单例模式
          • 一定要返回:return super().__new__(cls)
          • 定义一个类变量instance,初始值为None
          • 在new方法中判断instance是否是空,不是空直接返回对象
          • cls代表当前类。new方法是静态方法,要手动传递cls
          • init是初始化方法,如果是单例模式,只初始化一次,也需要类变量来判断

    5.知识内容个人梳理

    6.今天都复习了之前的什么内容