p2s学习笔记第二录
datawhale p2s 学习chapter_2与chapter_3
chapter_2:数据类型和操作
常用内置类型
- 整数 int
离散
- 浮点数 float
双精度
- 布尔值 bool
True or False
- 类型 type
即int float等类型
- 字符串 string
5~9为数组类型
- 列表 list
- 元组 tuple
- 集合 set
- 字典 Dictionary (映射map)
- 复数 complex
- 函数 function
- 模块 module
常用内置常数
- True
真
- False
假
- None
空
- pi
数学常数 π = 3.141592...,精确到可用精度
- e
数学常数 e = 2.718281...,精确到可用精度
- tau
数学常数 τ = 6.283185...,精确到可用精度
- inf
浮点正无穷大,等价于 float('inf'),负无穷大使用 -math.inf
常用内置运算符
- 算术:+, -, *, @, /, //, **, %, - (一元算符), + (一元算符)
- 关系:<, <=, >=, >, ==, !=
- 赋值: +=, -=, *=, /=, //=, **=, %=
- 逻辑:and, or, not
-
除法类型
/ 指的是浮点数除法,它的结果是一个浮点数// 指的是整除除法,它的计算结果是整数,舍弃余数
-
模运算
% 代表模运算(取余),结果为商的余数
a mod b ⟺ a−(a∣b)×b
类型影响语义
print(3 * 2) #6
print(3 * "p2s") #p2sp2sp2s
print(3 + 2) #5
print("Data" + "whale") #Datawhale
print(3 + "p2s") #3p2s
运算符优先级
运算符 | 描述 |
---|---|
(expressions...),[expressions...], {key: value...}, | 绑定或加圆括号的表达式,列表显示,字典显示,集合显示 |
x[index], x[index:index], x(arguments...), x.attribute | 抽取,切片,调用,属性引用 |
await x | await 表达式 |
** | 乘方 |
+x, -x, ~x | 正,负,按位非 NOT |
*, @, /, //, % | 乘,矩阵乘,除,整除,取余 |
+, - | 加和减 |
<<, >> | 移位 |
& | 按位与 AND |
^ | 按位异或 XOR |
| | 按位或 OR |
in, not in, is, is not, <, <=, >, >=, !=, == | 比较运算,包括成员检测和标识号检测 |
not x | 布尔逻辑非 NOT |
and | 布尔逻辑与 AND |
or | 布尔逻辑或 OR |
if -- else | 条件表达式 |
lambda | lambda 表达式 |
:= | 赋值表达式 |
短路求值
X | Y | X and Y | X or Y | not X | not Y |
---|---|---|---|---|---|
True | True | True | True | False | False |
True | False | False | True | False | True |
False | False | False | False | True | True |
False | True | False | True | True | False |
def yes():
return True
def no():
return False
def crash():
return 1/0 # 会崩溃!
print(no() and crash()) # 成功运行!
print(crash() and no()) # 崩溃了!
print (yes() and crash()) # 因为上一行崩溃了,所以这行不会被运行,就是运行也会因为短路求值崩溃
#输出False
print(yes() or crash()) # 成功运行
print(crash() or yes()) # 崩溃了
print(no() or crash()) # 因为上一行崩溃了,所以这行不会被运行,就是运行也会因为短路求值崩溃
#输出True
type() vs isinstance()
- isinstance() 比 type() 更具有 稳健性(Robustness)
- 这种做法更加符合 面向对象编程 中 继承(inheritance)的思想
chapter_3:变量与函数
变量
-
变量的规则
- 变量是一个标签,它所指代的是一段数据
- 使用 = 来对这段数据的区域进行赋值
- 新值会覆盖旧值
- 新值的数据类型不一定与旧值相同
-
变量命名规则:
- 必须以字母或下划线(_)开头
- 命名可由字母、数字和下划线组成
- 大小写敏感
- 尽量避免使用保留字命名
-
保留字
False、None、True、and、as、assert、break、class、continue、def、del、elif、else、except、finally、for、from、global、if、import、in、is、lambda、nonlocal、not、or、pass、raise、return、try、while、with、yield
-
更新变量
x = 5 x += 2 # 等价于 x = x + 2
-
多变量赋值
a = b = c = 2 a, b, c = 1, 2, 6
函数
-
函数由两个部分组成:header 和 body
- header 用于定义函数接口(函数 名称 与 参数)
- body 包含函数所需要执行的操作
-
header
header 用于定义函数的名称和参数
- 当函数被调用时,参数将会作为变量被提供给函数的 body 部分
- 可以提供多个参数(用 , 分隔),也可以不提供参数
- header 以 : 结尾,代表后面会跟着 body 部分
-
body
body 包含函数执行的语句(statement)
- 语句需要缩进(由 Code Style Guide 决定)
- 当语句不再缩进,函数部分结束
- 一般会使用 return 语句让函数返回其结果,但不是必须的
-
函数示例
def double(x): print("I'm in double!") return 2 * x
- 我们使用函数名来调用函数
- 函数名后紧跟一对括号
- 括号中是我们设定的参数的值,一个不多,一个不少(这很重要)
- 函数会返回设定的 return 语句的值
- 如果参数数目没有匹配会Oops
def f(x, y, z): return x + y + z def g(): return 42 print(g(2)) # 崩溃! print(f(1, 2)) # 也会崩溃
-
多返回值
可设置多返回值
return 1,2,3
语句与表达式
-
表达式
- 它本身是值
- 它的计算结果是值
-
语句
- 它不是值
- 它不能打印
- 但它能执行一些操作
内置函数
- bool(),float()等python内置类型转换函数
- abs(),max(),min(),pow(),round()等python内置math库
变量作用域
-
每个变量都有属于自己的作用范围,在范围内生效
-
局部作用域
局部生效,只存在于函数内部,与其他函数中的同名变量无关,优先级大于全局
-
全局作用域
全局生效
返回语句 vs 输出语句
- 返回立即结束(函数内或全局)
- 输出不结束,且不会赋值于其他变量
嵌套函数 or 组合函数
-
嵌套函数,最先运行最内层的函数。
递归
-
组合函数,一般用于分治或模块化
分治