《Python 3: Fundamentals》学习笔记 C03 - Python Basics

108 阅读4分钟

课程地址:www.udemy.com/course/pyth…

作者 Dr.Fred Baptiste

重学一遍基础内容,顺便做点记录。

前面两个章节一个是介绍课程,另一个是在电脑上运行Python,就不做笔记了。值得一提的是,老师是用Jupyter Notebook结合python的virtual environment 讲解的

  1. Jupyter Notebook 可以在边写代码边做md格式的笔记;
  2. Virtual Environment 可以把pip的包单独安装在虚拟Python环境中,保持本地Python的干净;

Types

int (整数)

  • 在计算机中可以 准确表达
  • 可以加下划线来表示整数: -10_500_000

float (浮点数)

  • 可以用字面(literals) 定义float,注意加小数点:-12_34.567_89

  • 有些float在计算机中不能 准确表达,因为有些10进制的小数换成计算机的2进制后,就不是有限的 类似10进制的13\frac{1}{3} 一样

    • 能准确表达的例如 (0.625)10=121+022+123=(0.101)2(0.625)_{10} = \frac{1}{2^{1}} + \frac{0}{2^{2}} + \frac{1}{2^{3}} = (0.101)_{2}
    • 不能准确表达的例如 (0.1)10=(0.0001100110011...)2(0.1)_{10} = (0.0001100110011...)_{2}
    • 所以如果在Python中输入0.1 + 0.1 + 0.1 == 0.3 就会有返回False
    • 当你在Python交互命令中输入0.1,返回的只是字符串表达(string representation),而且Python为了让人们更容易读懂,所以就返回了“0.1”,可以用format函数让它显形 image.png
    • 比较浮点数最好的方式是做差比较,当小于误差范围就返回True,下图中0.001叫做tolerance image.png

Decimal (小数)

  • 可以准确表达

Objects

image.png

int也是对象,当在执行10 + 100时,其实10调用了__add__函数 image.png

float同理也是对象,也有functionality,例如as_integer_ratio()

image.png

Variables

变量名只是一个label,只是一个reference,指向了object

image.png

上图中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,除了幂是整数,也可以是小数。甚至进行复数计算。就和高中数学一样。

image.png

当在Python输入1 + 2后,按下回车后,中间发生了什么?

1和2其实都是int对象,里面有__add__方法,python实际是调用了这个方法后进行计算 (1).__add__(2)

所有的类型都有__add__方法,我们甚至可以自己定义

image.png

Operator Precedence

image.png 为了提高可读性,建议用括弧

image.png

Integer Division and Modulus

//运算符

先看一个简单的例子

12 // 5 结果输出是2,很简单,那如果是-12 // 5,结果是多少呢?

//运算符实际计算的是小于等于这个数的最小整数,也称为floor

所以 -12 // 5的结果是 -3

image.png

%运算符

当a与b都是正数时,12 % 5的结果就是余数,也就是2, 那么如果是负数呢?

下面是推导过程

image.png

Comparison Operators

  1. 两个对象要是不能比较,==返回的是False值,而<=或者>=会触发TypeError
  2. 如果只是比较两个对象的值相当,称为equality,用==进行比较;如果比较的是两个对象在内存地址完全一样,称为identity,用is进行比较
  3. python会预先加载一些比较小的数,所以a = 10; b = 10并没有创建一个新的int对象,只是贴了两个label到这个对象上;而c = 1_000python并没有预加载,所以c = 1_000; d=1_000是创建了两个新的int对象,内存地址不相同,所以会有下图的结果

image.png 4. 自定义的对象如果用==进行大小比较,python会默认进行内存地址比较,也就是identify比较;至于定义equality,这个可以自己重写__eq__函数

image.png

Boolean Operators

short-circuited evaluation机制

a and b只要a是False,python就不会再去计算b,直接返回False,a or b只要a是True, python也不会再去计算b, 直接返回True,所以写if语句的时候考虑下顺序,对优化很有帮助