课程地址:www.udemy.com/course/pyth…
作者 Dr.Fred Baptiste
重学一遍基础内容,顺便做点记录。
前面两个章节一个是介绍课程,另一个是在电脑上运行Python,就不做笔记了。值得一提的是,老师是用Jupyter Notebook结合python的virtual environment 讲解的
- Jupyter Notebook 可以在边写代码边做md格式的笔记;
- Virtual Environment 可以把pip的包单独安装在虚拟Python环境中,保持本地Python的干净;
Types
int (整数)
- 在计算机中可以 准确表达
- 可以加下划线来表示整数: -10_500_000
float (浮点数)
-
可以用字面(literals) 定义float,注意加小数点:-12_34.567_89
-
有些float在计算机中不能 准确表达,因为有些10进制的小数换成计算机的2进制后,就不是有限的 类似10进制的 一样
- 能准确表达的例如
- 不能准确表达的例如
- 所以如果在Python中输入
0.1 + 0.1 + 0.1 == 0.3就会有返回False值 - 当你在Python交互命令中输入0.1,返回的只是字符串表达(string representation),而且Python为了让人们更容易读懂,所以就返回了“0.1”,可以用format函数让它显形
- 比较浮点数最好的方式是做差比较,当小于误差范围就返回True,下图中0.001叫做tolerance
Decimal (小数)
- 可以准确表达
Objects
int也是对象,当在执行10 + 100时,其实10调用了__add__函数
float同理也是对象,也有functionality,例如as_integer_ratio()
Variables
变量名只是一个label,只是一个reference,指向了object
上图中float对象是个不可变的(immutable)对象,那么变量的“变”是指什么呢?
- 变量名指向的对象整体可以变
a = 100; a = True - 变量如果指向的是一个可变的(mutable)对象,那么对象的state就能改变
a = Car("Porsche",odometer=10_000)假如保时捷再开了1000公里,那么odometer就变成了11_000了
PEP8对变量的命名建议用snakecase 例如:account_balance
Arithmetic Operators
被作用的值被称为operands,根据运算符能作用的operands的数目,可以分为一元运算符(-,+),二元运算符(+ - * / ** ),三元运算符
**是幂运算符,2 ** 4返回的是int,而2 ** (-4)返回的是float,除了幂是整数,也可以是小数。甚至进行复数计算。就和高中数学一样。
当在Python输入1 + 2后,按下回车后,中间发生了什么?
1和2其实都是int对象,里面有__add__方法,python实际是调用了这个方法后进行计算
(1).__add__(2)
所有的类型都有__add__方法,我们甚至可以自己定义
Operator Precedence
为了提高可读性,建议用括弧
Integer Division and Modulus
//运算符
先看一个简单的例子
12 // 5 结果输出是2,很简单,那如果是-12 // 5,结果是多少呢?
//运算符实际计算的是小于等于这个数的最小整数,也称为floor
所以 -12 // 5的结果是 -3
%运算符
当a与b都是正数时,12 % 5的结果就是余数,也就是2, 那么如果是负数呢?
下面是推导过程
Comparison Operators
- 两个对象要是不能比较,
==返回的是False值,而<=或者>=会触发TypeError - 如果只是比较两个对象的值相当,称为equality,用
==进行比较;如果比较的是两个对象在内存地址完全一样,称为identity,用is进行比较 - python会预先加载一些比较小的数,所以
a = 10; b = 10并没有创建一个新的int对象,只是贴了两个label到这个对象上;而c = 1_000python并没有预加载,所以c = 1_000; d=1_000是创建了两个新的int对象,内存地址不相同,所以会有下图的结果
4. 自定义的对象如果用
==进行大小比较,python会默认进行内存地址比较,也就是identify比较;至于定义equality,这个可以自己重写__eq__函数
Boolean Operators
short-circuited evaluation机制
a and b只要a是False,python就不会再去计算b,直接返回False,a or b只要a是True, python也不会再去计算b, 直接返回True,所以写if语句的时候考虑下顺序,对优化很有帮助