p2s 学习笔记第二录

发布时间 2023-11-25 23:25:14作者: LPF0502

datawhale p2s 学习chapter_2与chapter_3

chapter_2

常用内置类型

  1. 整数 int

    离散

  2. 浮点数 float

    双精度

  3. 布尔值 bool

    True or False

  4. 类型 type

    即int float等类型

  5. 字符串 string

    5~9为数组类型

  6. 列表 list
  7. 元组 tuple
  8. 集合 set
  9. 字典 Dictionary (映射map)
  10. 复数 complex
  11. 函数 function
  12. 模块 module

常用内置常数

  1. True

  2. False

  3. None

  4. pi

    数学常数 π = 3.141592...,精确到可用精度

  5. e

    数学常数 e = 2.718281...,精确到可用精度

  6. tau

    数学常数 τ = 6.283185...,精确到可用精度

  7. inf

    浮点正无穷大,等价于 float('inf'),负无穷大使用 -math.inf

常用内置运算符

  1. 算术:+, -, *, @, /, //, **, %, - (一元算符), + (一元算符)
  2. 关系:<, <=, >=, >, ==, !=
  3. 赋值: +=, -=, *=, /=, //=, **=, %=
  4. 逻辑: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

变量

  1. 变量的规则

    • 变量是一个标签,它所指代的是一段数据
    • 使用 = 来对这段数据的区域进行赋值
    • 新值会覆盖旧值
    • 新值的数据类型不一定与旧值相同
  2. 变量命名规则:

    • 必须以字母或下划线(_)开头
    • 命名可由字母、数字和下划线组成
    • 大小写敏感
    • 尽量避免使用保留字命名
  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

  4. 更新变量

    x = 5
    x += 2 # 等价于 x = x + 2
    
  5. 多变量赋值

    a = b = c = 2
    a, b, c = 1, 2, 6
    

函数

  1. 函数由两个部分组成:header 和 body

    • header 用于定义函数接口(函数 名称 与 参数)
    • body 包含函数所需要执行的操作
  2. header

    header 用于定义函数的名称和参数

    • 当函数被调用时,参数将会作为变量被提供给函数的 body 部分
    • 可以提供多个参数(用 , 分隔),也可以不提供参数
    • header 以 : 结尾,代表后面会跟着 body 部分
  3. body

    body 包含函数执行的语句(statement)

    • 语句需要缩进(由 Code Style Guide 决定)
    • 当语句不再缩进,函数部分结束
    • 一般会使用 return 语句让函数返回其结果,但不是必须的
  4. 函数示例

    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)) # 也会崩溃
    
  5. 多返回值

    可设置多返回值

    return 1,2,3 
    

语句与表达式

  1. 表达式

    • 它本身是值
    • 它的计算结果是值
  2. 语句

    • 它不是值
    • 它不能打印
    • 但它能执行一些操作

内置函数

  1. bool(),float()等python内置类型转换函数

  2. abs(),max(),min(),pow(),round()等python内置math库

变量作用域

  1. 每个变量都有属于自己的作用范围,在范围内生效

  2. 局部作用域

    局部生效,只存在于函数内部,与其他函数中的同名变量无关,优先级大于全局

  3. 全局作用域

    全局生效

返回语句 vs 输出语句

  1. 返回立即结束(函数内或全局)
  2. 输出不结束,且不会赋值于其他变量

嵌套函数 or 组合函数

  1. 嵌套函数,最先运行最内层的函数。

    递归

  2. 组合函数,一般用于分治或模块化

    分治