Python
一、入门
1、数据存储与运算
- 字面量的定义
字面量是代码中直接写出的固定值,如 5、3.14、“hello”、[1,2,3] - 字面量的类型
| 类型 | 书写格式示例 |
|---|---|
| 整型 | 42, -7, 0b1010(二进制), 0o12(八进制), 0xA(十六进制) |
| 浮点型 | 3.14, -0.5, 2.5e3(科学计数法) |
| 字符串 | "hello", 'world', """多行""", '''字符串''' |
| 布尔型 | True, False |
| 空值 | None(空值类型只有 None 这一个值,表示空或无值) |
| 列表 | [1, 2, 3], ["a", "b"] |
| 元组 | (1, 2), 3, 4(无括号也合法) |
| 字典 | {"name": "Alice", "age": 25} |
| 集合 | {1, 2, 3} |
TIP
1、布尔类型参与运算时,True 会转化为 1,False 会转化为 0
2、空值这种类型仅包含一个值 —— None
- 判断变量类型的方法:
type(变量)或isinstance(变量,类型) - 类型转换
| 目标类型 | 函数 | 示例 | 说明 |
|---|---|---|---|
| 整型 | int(x) |
int("123") → 123int(3.14) → 3 |
截断小数,可指定进制:int("A",16) → 10 |
| 浮点型 | float(x) |
float("3.14") → 3.14float(5) → 5.0 |
|
| 字符串 | str(x) |
str(123) → "123"str(3.14) → "3.14" |
|
| 布尔型 | bool(x) |
bool(1) → Truebool(0) → Falsebool("") → False |
假值:None、0、0.0、""、[]、{}、set() |
| 列表 | list(iter) |
list("abc") → ['a','b','c']list((1,2)) → [1,2] |
|
| 元组 | tuple(iter) |
tuple([1,2]) → (1,2) |
|
| 集合 | set(iter) |
set([1,2,2]) → {1,2} |
自动去重 |
| 字典 | dict(iter) |
dict([("a",1),("b",2)]) → {"a":1,"b":2} |
需传入键值对序列 |
进制转换:转二进制
bin()、转八进制oct()、转十进制ord()、转十六进制hex()
- 字符串的定义方法
1、'xxx'、“xxx”:无本质区别,但可互相嵌套避免转义
| 格式符号 | 描述 |
|---|---|
| %s | 字符串占位符 |
| %d | 整数占位符 %5d表示整数的宽度是5,不足5位时用空格补 |
| %f | 浮点数占位符 %.2f表示精确到小数点后两位 |
| %c | ASCII码占位符 |
| %u | 无符号数占位符 |
| %o | 无符号八进制占位符 |
| %x 或 %X | 无符号十六进制占位符 |
| %e 或 %E | 浮点数(科学计数法形式)占位符 |
2、"""xxx""":可跨多行,保留换行和缩进(也可以采用+\来连接多行)
3、"""str.format()
# 基本使用
print('{}网址: "{}!"'.format('xxx', 'www.xxx.com')) # xxx网址: "www.xxx.com!"
# 位置型
print('{1} 和 {0}'.format('Google', 'Runoob')) # Runoob 和 Google
# 关键词型
print('{name}网址: {site}'.format(name='xxx', site='www.xxx.com')) # xxx网址: "www.xxx.com!"
# 保留三位小数
print('常量 PI 的值近似为 {0:.3f}。'.format(math.pi)) # 常量 PI 的值近似为 3.142。
# 左填充和右填充
print('{0:10} ==> {1:10}'.format('Google', 1)) # Google ==> 1
# 传入一个容器
table = {
'Google': 1, 'Runoob': 2, 'Taobao': 3}
print('Runoob: {0[Runoob]}; Google: {0[Google]}; Taobao: {0[Taobao]}'.format(table) # Runoob: 2; Google: 1; Taobao: 3
# **类似于一种解构
table = {
'Google': 1, 'Runoob': 2, 'Taobao': 3}
print('Runoob: {Runoob}; Google: {Google}; Taobao: {Taobao}'.format(**table)) # Runoob: 2; Google: 1; Taobao: 3
-
字符串拼接时,若要拼接其他类型的数据,需要用
str()进行转换 -
字符串格式化方法
1、”%s %d“ % (值1,值2):例如 “name: %s, age: %d” % (“Tom”, 18)
2、f"内容:{值}":例如 f"age: {age}" -
不让 \ 发生转义:
r"xxx" -
输出多份字符串:
print( 字符串 * 数字 ) -
获取用户的输入:
a = input("xxx") -
特殊字符
| 特殊字符 | 描述 |
|---|---|
| \b | 退格 |
| \000 | 空 |
| \n | 换行 |
| \t | 横向制表符 |
| \v | 纵向制表符 |
| \yyy | \三位数字,表示八进制 |
| \xyy | \x两位数字,表示十六进制 |
-
算术运算符
1、//:整除运算(向下取整)
2、**:幂运算(返回左操作数的有右操作数次幂) -
逻辑运算符
1、~:按位取反
2、<<、>>:逻辑移位 -
成员运算符:
in和not in -
身份运算符:
is和is not—— 是否引用相(不)同对象,类似于 id(xxx) == id(yyy) -
海象运算符
:=:允许在表达式中同时赋值并使用变量
# 传统写法
n = len(lst)
if n > 5:
print(n)
# 海象写法
if (n := len(lst)) > 5:
print(n)
- 优先级
| 优先级(由上往下递减) | 描述 | 类型 |
|---|---|---|
(expr...), [expr...], {key: value...}, {expr...} |
绑定或加括号、列表/字典/集合显示 | 表达式 |
x[index], x[index1:index2], x.attr, x() |
索引、切片、属性引用、函数调用 | 自操作 |
await x |
await 表达式 | |
** |
乘方 | 运算 |
+x, -x, ~x |
正、负、按位非 | 自运算 |
*, @, /, //, % |
乘、矩阵乘、除、整除、取余 | 运算 |
+, - |
加法、减法 | 运算 |
<<, >> |
移位 | 比特运算 |
& |
按位与 | 比特操作 |
^ |
按位异或 | 比特操作 |
| |
按位或 | 比特操作 |
in, not in, is, is not, <, <=, >, >=, !=, == |
比较运算 | 比较 |
not |
逻辑非 | 逻辑运算 |
and |
逻辑与 | 逻辑运算 |
or |
逻辑或 | 逻辑运算 |
:= |
海象运算符(赋值表达式) | 赋值 |
lambda |
lambda 表达式 |
- 在交互模式中,最后被输出的表达式结果会被赋值给变量_
>>> price = 100.50
>>> price * tax
12.5625
>>> price + _
113.0625
- 数学方法
| 常用操作 | 描述 |
|---|---|
| abs(x) | 返回数字的绝对值 |
| fabs(x) | 以浮点数的形式返回数字的绝对值 |
| ceil(x) | 向上取整 |
| floor(x) | 向下取整 |
| cmp(x,y) | 如果 x<y 则返回 -1,x==y 则返回 0,x>y 则返回 1 |
| exp(x) | 返回 e 的 x 次方,例如 exp(1) 返回 2.71828… |
| log(x,e) | 以 e 为基数求对数 |
| log10(x) | 以 10 为基数求对数 |
| max(x1,x2…) | 返回最大值 |
| min(x1,x2…) | 返回最小值 |
| modf(x) | 返回 x 的整数部分和小数部分,整数部分以浮点型进行表示 |
| pow(x,y) | 计算 x**y 的值 |
| round(x[,n]) | 返回浮点数 x 四舍五入的值,n表示保留的位数 |
| sqrt(x) | 返回数字 x 的平方根 |
| 随机数函数 | 描述 |
|---|---|
| choice(seq) | 从序列的元素中随机挑一个元素 |
| randrange([start,] stop [,strp]) | 在指定返回内,start 默认是1,按 step 递增的集合中获取一个随机数 |
| random() | 随机生成 [ 0,1 ) 范围内的数 |
| shuffle(list) | 将序列的所有元素随机进行排序 |
| uniform(x,y) | 随机生成下一个实数,它在 [ x,y ] 范围内 |
| 三角函数 | 描述 |
|---|---|
| sin(x)、cos(x)、tan(x) | 正弦、余弦、正切 |
| asin(x)、acos(x)、atan(x) | 反正弦、反余弦、反正切 |
| degrees(x) | 将弧度转换为角度,如 degrees(math.pi/2) 返回 90° |
| radians(x) | 将角度转换为弧度 |
数字常量:
pi:Π、e:自然常数
- bytes 类型:表示不可变的二进制序列,与字符串类型不同的是,bytes 类型中的元素是整数值(0 到 255 之间的整数)而不是 Unicode 字符
- 创建 bytes 类型数据:
b'str'、bytes(str,encoding)、bytes(list)、str.encode('utf-8')
# 编码
b1 = b'hello'
b2 = bytes([104, 101, 108, 108, 111])
b3 = bytes("hello", encoding="utf-8")
b4 = 'hello'.encode('utf-8')
# 解码
print(b1)
s1 = b1.decode() # 默认使用 utf-8 解码
print(s1)
# 判断
print(b1[0],type(b1[0])) # 104 int
if b1[0] == ord("h"):
print("b1's first element is 'h'")
- 字节对象的常用的操作类似于字符串
b1 = b"hello"
b2 = b"world"
# 索引和切片
print(b1[0]) # 104,对应 'h' 的 ASCII 码
print(b1[:2]) # b'he',切片结果仍然是 bytes 对象,而不是一个整形数组
print(len(b1)) # 5
print(b1 + b2) # 输出: b'helloworld'
print(b" ".join([b1, b2])) # 输出: b'hello world'
b = b"hello world"
print(b.find(b"world")) # 输出: 6
print(b.replace(b"world", b"Python")) # 输出: b'hello Python'
b = b"hello world"
print(b.split(b" ")) # 输出: [b'hello', b'world']
b = b"hello"
print(b.startswith(b"he")) # 输出: True
print(b.isalpha()) # 输出: True
b = b"hello"
print(list(b)) # 输出: [104, 101, 108, 108, 111]
- bytearray对象,其与 bytes 的区别在于它能够进行修改
ba = bytearray(b'hello')
ba[0] = 72 # 将第一个字节修改为 ASCII 码 72,即 'H'
print(ba) # 输出: bytearray(b'Hello')
2、流程控制
- natch…case 语法
match 表达式:
case 值1:
操作1
case 值2 if 条件表达式: # 匹配值2 且 满足条件
操作2
case 值3|值4: # 匹配值3或值4
操作3
case _: #其他情况
操作4
TIP
1、是 match 不是 switch
2、操作里不需要加 break
- for…else、while…else 语法:else会在循环正常结束后执行(如果循环中用了break则不会触发)
TIP:while 跟 for 的区别主要在于 while 只知道循环开始/结束的条件,但循环的次数是未知的,但 for 会知道循环的次数
- range():生成指定规则的数字序列
1、range(end)
2、range(start,end)
i=1
while i in range(1,6):
print(i)
i+=1
3、range(start,end,step)
for i in range(1,6,2):
print(i)
TIP
1、rang() 的范围从 0 开始,且不包含 end
2、range() 配合 while 使用时,i 是独立于该序列之外的;配合 for 使用时,i 即为遍历过程中的每个元素
3、数据容器
3.1、数据容器
- 数据容器:一种可以容纳多份任意类型数据的数据类型
| 数据容器 | 支持重复元素 | 是否可以修改 | 是否支持随机访问 |
|---|---|---|---|
| 列表 (list) | ✅ | ✅ | ✅ |
| 元组 (tuple) | ✅ | ❌ | ✅ |
| 字符串 (str) | ✅ | ❌ | ✅ |
| 集合 (set) | ❌ | ✅ | ❌ |
| 字典 (dict) | ❌ (键) / ✅ (值) | ✅ | ✅ (Python 3.7+) |
TIP
1、物种容器都是可迭代对象,都支持for...in...的遍历
2、字典默认迭代的是键。可以用.items()迭代键值对、用.keys()迭代键、用.values()迭代值
3.2、列表
- 列表:可存放不同类型元素,可存放重复元素,元素可修改,可随机访问
- 基本操作
| 操作 | 方法/语法 | 说明 | 示例 (lst = [1,2,3]) | 结果 |
|---|---|---|---|---|
| 增 | append(x) |
末尾添加一个元素 | lst.append(4) |
[1,2,3,4] |
insert(i, x) |
在索引 i 处插入元素 x | lst.insert(1, 10) |
[1,10,2,3] |
|
extend(iter) |
将可迭代对象中的元素逐个添加到末尾 | lst.extend([5,6]) |
[1,2,3,5,6] |
|
| 删 | del lst[i] |
删除指定索引的元素 | del lst[0] |
[2,3] |
pop(i) |
删除并返回指定索引的元素(默认末尾) | lst.pop(1) |
返回 2,lst为 [1,3] |
|
remove(x) |
删除第一个值为 x 的元素 | lst.remove(2) |
[1,3,2] |
|
clear() |
清空列表所有元素 | lst.clear() |
[] |
|
| 改 | 索引赋值 | 将指定索引位置的元素替换为新值 | lst[0] = 100 |
[100,2,3,2] |
| 切片赋值 | 将切片区域替换为右侧可迭代对象中的元素 | lst[1:3] = [8,9] |
[1,8,9,2] |
|
| 查 | lst[i] |
通过索引获取元素 | lst[1] |
返回 2 |
index(x) |
返回第一个值为 x 的索引,找不到报错 | lst.index(2) |
返回 1 |
|
count(x) |
统计 x 在列表中出现的次数 | lst.count(2) |
返回 2 |
|
in 运算符 |
判断元素是否存在于列表中 | 2 in lst |
返回 True |
|
切片 [i:j] |
获取索引 i 到 j-1 的子列表 | lst[1:3] |
[2,3] |
|
| 排序 | sort() |
原地升序排序(修改原列表) | lst.sort() |
[1,2,3] |
sort(reverse=True) |
原地降序排序 | lst.sort(reverse=True) |
[3,2,1] |
|
sorted(lst) |
返回新列表,原列表不变 | new = sorted(lst) |
new=[1,2,3],lst不变 |
|
| 反转 | reverse() |
原地反转元素顺序 | lst.reverse() |
[3,2,1] |
lst[::-1] |
通过切片返回新反转列表 | new = lst[::-1] |
new=[3,2,1],lst不变 |
TIP
1、切片语法:list[start:end:step]、step 默认为 1
2、最后有一个元素的下标可视为 -1,倒数第二个元素的下标可视为 -2
- 合并列表方法
1、+:lst = lst1 + lst2
2、解包:lst = [*lst1,*lst2]
解包:将列表这一类容器解开形成一个个独立的元素
-
包含关系:
in和not in -
列表推导式:按照一定规则快速生成一个列表的方法
1、格式1:列表名 = [ 要插入列表的数据 for i in 列表 ]
2、格式2:列表名 = [ 要插入列表的数据 for i in 列表 if 条件 ]
同样可以运用于元组、集合、字典。但是元组推导式返回的结果是一个生成器对象
- 常见数据统计方法:
min()、max()、sum()、len()
3.3、字符串
- 字符串:存放字符的容器,特点是不可修改,但可随机访问、可迭代
- 基本操作
| 方法/语法 | 说明 | 示例 (s = “Hello World”) | 结果 |
|---|---|---|---|
s[i] |
索引获取字符 | s[1] |
'e' |
s[start:end:step] |
切片 | s[0:5] |
'Hello' |
len(s) |
长度 | len(s) |
11 |
lower() |
全部转小写 | s.lower() |
'hello world' |
upper() |
全部转大写 | s.upper() |
'HELLO WORLD' |
strip() |
去除首尾空白 | " hi ".strip |


138

被折叠的 条评论
为什么被折叠?



