阅读 70

Python学习第一弹小总结

00 变量的本质 ---- 对象

python内部使用了一个对象模型,用来存储变量以及对应的数据,python中的任何类型的变量都会被翻译成一个对象,这就是变量的本质.

python内部的对象模型由3部分组成: 身份(函数id) 、类型(type) 、 值(即变量本身)

  • 身份: 用来标识对象的唯一标识,通过调用函数id可以得到它,我的理解是它可能是对应存储的内存地址索引的一个id值,可以调用函数id()查看id值;
  • 类型: 用来表明对象可以存放的类型,该具体类型限制了该对象保存的内容、可以进行的操作、遵循的规则,可以调用函数type()查看类型;
  • 值: 即该对象存储的具体数值,变量本身便是它的值.

python中内置了两个帮助函数:

  • dir: 用来查询类或者类型的所有属性,如: dir(list)
  • help: 用来查询类或者类型具体的说明文档,如: help(int)

01 python3的六个标准的数据类型

  • Number(数字)
  • String(字符串)
  • List(列表)
  • Set(集合)
  • Tuple(元组)
  • Dictionary(字典)

python3的六个标准数据类型中:

  • 不可变数据(3个): Number(数字) 、String(字符串) 、Tuple(元组)
  • 可变数据(3个): List(列表) 、 Dictionary(字典) 、 Set(集合)

02 数字类型

整数(int) 、 浮点数(float) 、复数(complex) 、 布尔(bool)

  • python3只有一种整数类型int,表示为长整型,没有python2的Long
  • 浮点数精确度问题
0.1+0.2 = 0.30000000000000004
0.1+0.7 = 0.7999999999999999
复制代码

可以导入模块 decimal (十进制)

`import decimal`
a = decimal.Decimal('0.1')
b = decimal.Decimal('0.2')
print(a+b) // 0.3
复制代码
  • 复数: 有实部和虚部的值,它们都是浮点数
x = 1 + 2j // 1.0是实部的值,2.0是虚部的值
x.real 获取实部的值
x.imag 获取虚部的值
复制代码

关于复数: z = a + bj

  • 复数的模: |z|= √ a^2+b^2
  • 共轭复数:
  1. 实部相等,虚部互为相反数;
  2. 在复平面上,表示两个共轭复数的点关于x轴对称;
  3. 如果虚部为0,则共轭复数就是本身.

Fraction(x,y): 分子为x,分母为y

03 list 列表: 切片用法

  • list.append() //添加对象
  • list.extend() //添加一个可迭代的对象

extend()方法的参数必须是一个可迭代对象,新的内容是追加到原列表最后一个元素的后面

  • list.insert() //两个参数,第一个是插入的位置,第二个是插入的内容
  • list.remove() //删除指定元素
  1. 如果列表中存在多个元素,只会删除第一个匹配的元素
  2. 如果指定元素不存在,程序会报错
  • list.pop() //出栈,返回出栈的元素
  • list.clear() //清空列表
  • list.sort() //排序
  • list.reverse() //反转列表
  • list.count() //查找某个元素出现的次数
  • list.index() //查找某个元素的索引值

1.如果是多个相同元素会返回第一个出现的元素索引值
2.还有两个参数: start和end,可以指定查找的起始和结束位置

  • list.copy() // 拷贝(浅拷贝)列表也可以使用切片: list[:]

04 python的一些特殊算法

x == ( x // y ) * y + ( x % y )

  • x // y: x除以y的结果(地板除: 相除之后得出一个整数结果,若结果不为整数,则向下取整)
  • abs(x): x的绝对值,如果x是复数,则返回复数的模
  • int(x),float(x): 转换成对应的数据类型
  • complex(re,im): 返回一个复数,re是实部,im是虚部
  • c.conjugate(): 返回c的共轭复数
  • pow(x,y): 返回x的y次方
  • x ** y: 返回x的y次方
  • divmod(x,y): 返回(x//y,x%y)

运算符优先级(参考): 从高到低排序

  1. 绑定或元组显示, 列表显示, 字典显示, 集合显示
  2. x[index]\ x(args)\ x.attribute: 下标, 切片, 函数调用, 属性引用
  3. await x: await 表达式
  4. **: 指数
  5. +x, -x ~x: 正号,负号,按位翻转
  6. *, @, /, //, %: 乘法, 矩阵乘法, 除法, 地板除, 取余
  7. +, -: 加法, 减法
  8. << , >>: 移位
  9. &: 按位与
  10. ^: 按位异或
  11. |: 按位或
  12. in, not in, is, is not, < , <=, >, >=, !=, ==: 比较
  13. not: 布尔"非"
  14. and: 布尔"与"
  15. or: 布尔"或"
  16. if-else: 条件表达式
  17. lambda: Lambda 表达式

05 循环和分支

python的循环和分支的执行块是按照缩进来判定的,所以要注意缩进

if-else分支判断:

就是普通那样的if-else,python还有一种奇怪的写法(读起来感觉很累): 'a' if True else 'b' 如果条件为真,则值为a,否则值为b

while循环:

符合条件则一直循环下去,分别有条件不符合,break,continue可以控制跳出循环;

break和continue的区别:

break是直接跳出并结束循环,continue则是跳出此次循环,会继续执行下一个符合条件的循环,如果while循环之后还有一个else,break会直接跳过它,而continue不会.

for循环: 也可以搭配break,continue使用

语法: for 变量 in 可迭代对象(Iterable):
    statement(s)
复制代码

可迭代对象: 即可循环的对象,例如str,list,dict等
如果要循环整型,可以配合range()函数使用

06 python的缓存重用机制

  • 之前在程序中创建过,就直接存入缓存,后续不再创建, 生效范围: 全局
    1. 范围在[-5,256]之间的小整数
    2. 字符串对象
  • 只在该代码块内创建过就直接缓存,后续不再创建, 生效范围: 本代码块
    1. 大于256的整数
    2. 大于0的浮点型对象
  • 不进行缓存,每次都需要额外创建
    1. 小于0的浮点型对象
    2. 小于-5的整数