python语法(上)
Python3 基本数据类型
基础内容
Python3 的六个标准数据类型中:
不可变数据(3 个): Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个): List(列表)、Dictionary(字典)、Set(集合)。
- 等号(=)用来给变量赋值
- Python允许你同时为多个变量赋值
- type() 函数查看变量的类型
Number(数字)
Python3 支持 int、float、bool、complex(复数)。
- Python可以同时为多个变量赋值,如a, b = 1, 2。
- 一个变量可以通过赋值指向不同类型的对象。
- 数值的除法包含两个运算符:/ 返回一个浮点数,// 返回一个整数。
- 乘方为
**,取余为% - 在混合计算时,Python会把整型转换成为浮点数。
- Python3 中,bool 是 int 的子类,True 和 False 可以和数字相加
String(字符串)
字符串不能被改变
索引及查找:变量[头下标:尾下标]
- 反斜杠可以用来转义,使用r可以让反斜杠不发生转义。
- 字符串可以用+运算符连接在一起,用运算符重复。
- Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。
bool(布尔类型)
- bool 是 int 的子类,因此布尔值可以被看作整数来使用,和其他数据类型进行比较,和逻辑运算符一起使用,被转换成其他数据类型,其中 True 等价于 1。
- 可以使用
bool()函数将其他类型的值转换为布尔值。以下值在转换为布尔值时为False:None、False、零 (0、0.0、0j)、空序列(如''、()、[])和空映射(如{})。其他所有值转换为布尔值时均为True。
List(列表)
与Python字符串不一样的是,列表中的元素是可以改变的
索引:
1 | |
Tuple(元组)
1 | |
- 与字符串一样,元组的元素不能修改。
- 元组也可以被索引和切片,方法一样。
- 注意构造包含 0 或 1 个元素的元组的特殊语法规则。
- 元组也可以使用 + 操作符进行拼接。
Set(集合)
- 集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。
- 创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
1 | |
Dictionary(字典)
- 字典是一种映射类型,它是一个无序的 键(key) : 值(value) 的集合。
- 字典的关键字必须为不可变类型,且不能重复。
- 创建空字典使用 { }。
构造函数 dict() 可以直接从键值对序列中构建字典
1 | |
bytes 类型
bytes 类型通常用于处理二进制数据,创建 bytes 对象的方式有多种,最常见的方式是使用 b 前缀
1 | |
此外,也可以使用 bytes() 函数将其他类型的对象转换为 bytes 类型。
1 | |
bytes 类型中的元素是整数值,因此在进行比较操作时需要使用相应的整数值。
1 | |
数据类型转换
隐式类型转换
较低数据类型(整数)自动转换为较高数据类型(浮点数)
显式类型转换
| 函数 | 描述 |
|---|---|
| int(x [,base]) | 将x转换为一个整数 |
| float(x) | 将x转换到一个浮点数 |
| complex(real [,imag]) | 创建一个复数 |
| str(x) | 将对象 x 转换为字符串 |
| tuple(s) | 将序列 s 转换为一个元组 |
| list(s) | 将序列 s 转换为一个列表 |
| dict(d) | 创建一个字典。d 必须是一个 (key, value)元组序列。 |
| set(s) | 转换为可变集合 |
| repr(x) | 将对象 x 转换为表达式字符串 |
| eval(str) | 用来计算在字符串中的有效Python表达式,并返回一个对象 |
| frozenset(s) | 转换为不可变集合 |
| chr(x) | 将一个整数转换为一个字符 |
| ord(x) | 将一个字符转换为它的整数值 |
| hex(x) | 将一个整数转换为一个十六进制字符串 |
| oct(x) | 将一个整数转换为一个八进制字符串 |
运算符
海象运算符:同时进行赋值和返回赋值的值
1 | |
位运算符
a = 0011 1100(60)
b = 0000 1101(13)
| 运算符 | 描述 | 实例 |
|---|---|---|
| & | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
| | | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 | (a | b) 输出结果 61 ,二进制解释: 0011 1101 |
| ^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
| ~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。 |
逻辑运算符
| 运算符 | 逻辑表达式 | 描述 |
|---|---|---|
| and | x and y | 如果 x 为 False, 返回 x 的值 |
| or | x or y | 如果 x 是 True,返回 x 的值 |
| not | not x | 如果 x 为 True,返回 False |
成员运算符
in:如果在指定的序列中找到值返回 True,否则返回 False。
身份运算符
x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True
%% id() 函数用于获取对象内存地址。%%
Python3 数字(Number)
在交互模式中,最后被输出的表达式结果被赋值给变量 _
1 | |
随机数函数,举例:
1 | |
还有:
random():随机生成下一个实数,它在[0,1)范围内。
本篇中还有很多数学函数,三角函数,数学常量如π和e
Python3 字符串(不可变,有序)
访问字符串
用索引,如str[:](左闭右开)
字符串运算符
如+
转义字符
如\a(交互式编程执行后电脑会有响铃)
字符串格式化
举例:将一个值插入到一个有字符串格式符 %s 的字符串中
1 | |
包括:格式化符号和格式化操作符辅助指令
三引号
三引号允许一个字符串跨多行,且字符串中可以包含各种特殊字符
f-string
%%比上面字符串格式化更好用,python3.6+%%
1 | |
Python 3.8 的版本中可以使用 = 符号来拼接运算表达式与结果
1 | |
字符串内建函数(str对象的方法)
语法:
一般都是==点表示法==,如:str.capitalize(),否则有标注
功能:想想(语法框架,输入参数,输出类型)
大小写转化,设定宽度,统计出现次数,编码解码,tab转space,查找,判断字符构成(is前缀的函数),合并多个字符串 str.join(sequence),统计长度,左右对齐,截断边缘指定字符,返回最大小字母,替换 replace(old, new [, max])
[[字符串内建函数]]
Python3 列表(可变,有序)
| Python 表达式 | 结果 | 描述 |
|---|---|---|
| 3 in [1, 2, 3] | True | 元素是否存在于列表中 |
| for x in [1, 2, 3]: print(x, end=” “) | 1 2 3 | 迭代 |
| 功能: | ||
替换或添加append()或删除del列表项,列表访问与拼接(使用+=等) |
Python3 元组(不可变,有序)
1 | |
关于元组是不可变的
1 | |
Python3 字典(可变,无序)
1 | |
无序,所以,访问时要以d['key1']访问
无序,所以,更新键值对要以d['key1']='value1'更新(新建/修改)
字典键的特性
- 不允许同一个键出现两次,否则,后一个值会被记住
- 键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行
Python3 集合(可变,无序,不重复)
1 | |
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
集合可进行计算-&|^
%%^指不同时包含于a和b的元素%%
操作技巧
功能及使用范围
%%对Python中的字符串s,列表l,元组t,字典d,集合e进行操作的内建函数,是不是有长得类似且有类似的功能?请为我归纳这些内建函数一般都会有哪些功能?%%
| 功能类别 | 典型函数/方法 | 适用结构 | 说明 | 其他序列 |
|---|---|---|---|---|
| 长度与最值 | len()、max()、min()、sum() |
全部序列(字符串、列表、元组) 集合、字典的键 |
len() 返回元素个数;max/min 返回最大最小值;sum 只对数字序列有效 |
|
| 查找与统计 | index()、count()、find()、in |
字符串、列表、元组 | index/count 返回首次出现位置或频次;find 仅字符串有,找不到返回 -1;in 通用成员测试 |
|
| 增删改 | append()、insert()、pop()、remove()、clear()、add()、discard()、remove()(集合) |
列表、集合、字典 | 列表可增删任意位置;集合用 add/discard/remove;字典用 pop(key)、del d[key] |
|
| 遍历与迭代 | keys()、values()、items()、iter() |
字典、集合 | 字典可分别迭代键、值、键值对;集合直接迭代元素 | s用for…in.. |
| 排序与反转 | sorted()、reversed()、sort()、reverse() |
列表、字符串、元组(前两者) | sorted/reversed 返回新对象;sort/reverse 原地修改(仅列表) |
|
| 拆分与合并 | split()、join()、extend()、+、update() |
字符串、列表、元组、字典 | 字符串用 split/join;列表用 extend/+;字典用 update 合并 |
|
| 去重与集合运算 | set()、union()、intersection(&)、difference(-)、symmetric_difference(^) |
集合 | 直接构造集合可去重;支持数学运算 |
快速对照示例
len("abc") == len([1,2,3]) == len({1,2,3}) == 3[1,2,2].count(2) == 2与"abba".count('b') == 2d = {'a':1}; d.keys() == ['a']与s = {1,2}; list(s) == [1,2]
一句话总结:Python 用统一的函数名(如 len、in、sorted)覆盖了大多数结构;可变类型(列表、集合、字典)额外提供增删改方法;不可变类型(字符串、元组)则只保留查询与转换功能。
功能共性
尽管具体方法名和行为有差异,但它们普遍支持以下几类操作:
- 长度查询 →
len() - 成员检测 →
in - 遍历/迭代 →
for x in obj - 创建副本 →
.copy()(可变类型) - 清空内容 →
.clear()(可变类型) - 转换为其他类型 →
list(s),set(l),tuple(d.keys())等 - 聚合操作 →
max/min/sum/sorted/any/all/count - 索引/切片访问(仅限有序容器:str/list/tuple)
⚠️ 注意:dict 和 set 是无序的(Python 3.7+ dict 有序是实现细节,但逻辑上仍视为映射而非序列),因此不支持索引、切片、
reversed()等依赖顺序的操作。
记忆技巧
可变 vs 不可变:
- 可变:list, dict, set → 有
.append,.add,.update,.clear等修改方法 - 不可变:str, tuple → 所有“修改”操作都返回新对象
- 可变:list, dict, set → 有
有序 vs 无序:
- 有序:str, list, tuple → 支持索引、切片、
reversed - 无序:set, dict(逻辑上)→ 不支持索引
- 有序:str, list, tuple → 支持索引、切片、
通用函数优先用
len(),in,sorted()等,而不是依赖特定方法
Python3 条件控制
- if-elif-else
- Python 3.10 增加了 match…case 的条件判断
1
2
3
4
5
6
7
8
9
10
11
12match subject:
case <pattern_1>:
<action_1>
case <pattern_2>:
<action_2>
case <pattern_3>:
<action_3>
case _:
<action_wildcard>
# 一个 case 也可以设置多个匹配条件,条件使用 | 隔开,例如:
case 401|403|404:
return "Not allowed"
Python3 循环语句
while…[else…]语句
1 | |
可以使用 CTRL+C 来退出当前的无限循环(condition)
for语句
Python for 循环可以遍历任何可迭代对象
1 | |
pass 语句
Python pass是空语句,是为了保持程序结构的完整性。
例题:斐波那契数列
1 | |
输出:1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,