Contents

Python tips

基本输入输出

- 输入

  • python2:

    • input:希望读取一个合法的python表达式
    • raw_input:以字符串形式读取输入
  • python3:

    • 只有input:以字符串形式读取输入

- 输出

  • python2:print是一条语句,后不加括号

  • python3:print是个函数,后加括号

复合数据结构

- 列表

  • list函数:将可迭代对象类型的数据转化为列表,如元组、range对象、字符串等

  • del函数:删除列表特定值(下标索引)或删除整个列表,若列表对象不再有其他对象指向,python同时删除该列表对象

  • 使用+向列表中添加元素会生成新的列表,将元素逐一赋值过去,效率较低

  • append函数原地修改,效率较高

  • extend函数将另一个迭代对象的所有元素添加至该列表的尾部,,不改变其内存首地址,属于原地操作

  • pop函数删除并返回指定元素(不提供下标则默认最后一个)

  • remove函数删除首次出现的指定元素,无返回值

  • shallow copy:拷贝外层对象,但内层对象还是指向相同对象,切片是shallow copy

  • deep copy:完全拷贝了对象及其子对象

  • 列表对象的sort方法原地排序,内置函数sorted返回新列表,不改变原列表

- 元组

  • 创建只有一个元素的元组必须在元素后加逗号

  • del函数只能删除整个元素,因为元组是不可变序列

  • 使用序列解包功能为多个变量同时赋值

    /upload/2022/06/2022-06-16-14-46-35-image-ce0ca92a23314b06a1c46577369e1894.png

- 字典

  • 字典也可以序列解包

/upload/2022/06/2022-06-16-14-47-28-image-36a8b10d32fa4ec3935189293c9d0391.png

  • 使用 dict() 函数利用已有数据创建字典

    /upload/2022/06/2022-06-16-14-52-14-image-07edb9ed6ff44c508788daf7d1342f41.png

  • get方法:获取指定键对应的值,若不存在,返回指定值(若未指定则默认返回none)

  • update方法:向字典中添加键值对,可使用=、字典、元组(注意一个元素时的逗号)

- 集合

  • 集合的交集、并集、差集等运算 /upload/2022/06/2022-06-16-15-01-31-image-4d0664dd89f34efe92692b7c1053b1c9.png

选择与循环

- 选择

  • ==is==测试值的相等性,递归地比较所有内嵌对象,is测试二者是否是同一对象(是否在同一内存地址中)

  • 缓存复用:对象是小的整数或字符串时,多个变量可能指向同一对象以提高性能

- 循环

  • while和for循环可以带else块,如果因循环表达式不成立而结束循环(不是break结束循环),则执行else中的内容

函数

- 可变长度参数

  • *parameter:接受多个形参并将其放在一个元组中

  • **parameter:用来接受字典形式的实参(可使用**字典解包代替)

    /upload/2022/06/2022-06-16-19-37-07-image-4be7e115cdc540a9be64ce689ff0c01d.png

- 函数调用时参数解包

  • 使用列表、元组等可迭代对象作为实参,并在前面加一个分号

  • 使用字典传参,默认使用字典的键

  • 要保证实参形参个数相同

    /upload/2022/06/2022-06-16-19-43-32-image-ebbbd9eea7794cafb292ea6abc3707d3.png

- lambda函数

  • map函数:将函数作用的一个序列或迭代器的每一个元素上

    /upload/2022/06/2022-06-16-19-55-02-image-5c8189f144ad4ab3a6ee816f201a4392.png

  • reduce函数:将一个接受两个参数的函数以累积的方式从左到右一次作用到一个序列或迭代器的每一个元素上

    • python3需要from functools import reduce

    /upload/2022/06/2022-06-16-19-58-00-image-f5e12f3b85f645cca9a255e2a33ccb49.png

  • filter函数:将一个函数作用到一个序列上,返回序列中使该函数返回值为True的元素组成的序列

    /upload/2022/06/2022-06-16-19-59-50-image-f1319722b1f6402283fb7628b2edf63f.png

- 迭代

  • 文件迭代器

    /upload/2022/06/2022-06-16-20-05-25-image-01a82fe77326418ba42f74701fc0f6ec.png

  • iter函数:根据可迭代对象构造成迭代器,对应可迭代对象的__iter__方法

  • next函数:迭代器的下一项,对应可迭代对象的__next__方法

- 生成器

  • 生成器函数(返回迭代器)

    /upload/2022/06/2022-06-16-20-35-31-image-207f075b85474925a4cd8f9e786ade08.png

  • 生成器表达式(返回迭代器)

    /upload/2022/06/2022-06-16-20-38-18-image-70f17c5f5965492d863dcf87a3b05676.png

- 类的__str____repr__方法

  • 都是返回对象的字符串表示

  • __str__:print函数优先使用__str__,若只重载了__repr__,则使用__repr__

  • __repr__:除print函数以外所有地方优先使用__repr__

    /upload/2022/06/2022-06-16-20-51-52-image-0324a0e82e9747d6b34ed402a5ab1995.png

- 内省

  • 内省(introspection)是指计算机程序在运行时(run time)检查对象(object)类型的一种能力,也称作运行时类型检查(run-time type checking)

  • instance.__class__instance.__dict__方法

  • 自定义通用显示工具类 /upload/2022/06/2022-06-16-20-55-14-image-574edf4dda65444983a734619d71bca9.png

- 装饰器

  • 由@符号开头,后面跟着所谓的元函数(metafunction)组成,一个函数加工另一个函数

    /upload/2022/06/2022-06-16-21-00-14-image-ba913a8bc8ee4207a4f3cac6437ea250.png

- 类的伪私有属性

  • class定义代码块内,开头有两个下划线,但结尾没有两个下划线的变量名,会自动扩展,从而包含它所在类的名称

  • 例如,Spam类内 __x 这样的变量名会自动变成 _Spam__x

    /upload/2022/06/2022-06-16-21-02-38-image-81f4be0679b64c91bafd41441b9c915b.png