文章目录
- 1. 基础数据类型:Python 世界的基本元素
- 2. 运算符:让数据动起来
- 2.1 算术运算符
- 2.2 增强赋值运算符
- 2.3 海象运算符
- 2.4 逻辑运算符
- 3. 字符串:文本处理的瑞士军刀
- 3.1 基本操作
- 3.2 特殊字符串
- 3.3 常用方法速查
- 3.4 join 与 split
- 3.5 strip 家族
- 3.6 其他实用方法
- 3.7 字符串格式化
- 4. 四大容器:组织数据的四把利器
- 4.1 列表 List
- 4.2 元组 Tuple
- 4.3 集合 Set
- 4.4 字典 Dict
- 4.5 容器间的类型转换
- 5. 流程控制:让程序拥有判断力
- 5.1 条件判断 if / elif / else
- 5.2 三目运算符
- 5.3 match-case(Python 3.10+)
- 5.4 while 循环
- 5.5 for 循环
- 5.6 pass 语句
- 6. 总结
前言 此文是我学习 Python 过程中整理的基础知识笔记,结合代码实践总结而来,分享给大家。一是为了记录,二是用于日后的回顾,三也是希望能给其他初学者带来一点点帮助。
目录
- 基础数据类型:Python 世界的基本元素
- 运算符:让数据动起来
- 字符串:文本处理的瑞士军刀
- 四大容器:组织数据的四把利器
- 流程控制:让程序拥有判断力
- 总结
1. 基础数据类型:Python 世界的基本元素
学习任何编程语言,第一步都是认识它的数据类型。Python 的基础数据类型非常简洁,一共就这几种:
name="LabEx"# str: 字符串age=10# int: 整数pi=3.14159# float: 浮点数is_active=True# bool: 布尔值 (True/False)nothing=None# NoneType: 表示"无值"或"空"correlate=2+3j# complex: 复数可以用type()来验证每个变量的类型:
print(type(name))# <class 'str'>print(type(age))# <class 'int'>print(type(pi))# <class 'float'>print(type(is_active))# <class 'bool'>print(type(nothing))# <class 'NoneType'>print(type(correlate))# <class 'complex'>这里有一个容易忽略的细节:None不是0,也不是False,它是 Python 中表示"什么都没有"的独立类型。很多初学者会把None和False混在一起,但它们语义完全不同——False是一个布尔判断结果,None是"值不存在"。
一句话总结:Python 的基础数据类型不多,但每一个都有明确的语义边界,搞清楚它们比死记硬背更重要。
2. 运算符:让数据动起来
2.1 算术运算符
Python 的算术运算符和其他语言大同小异,但有两个需要特别关注:
a,b=10,3print(f"整除:{a//b}")# 3 (丢弃余数)print(f"取模:{a%b}")# 1 (余数)print(f"幂运算:{a**b}")# 1000 (10的3次方)//是整除(地板除),/是普通除法。这两者的区别在处理负数时尤其明显:
print(-7//2)# -4 (向负无穷取整)print(-7/2)# -3.5 (正常除法)2.2 增强赋值运算符
所有算术运算符都可以和=组合成增强赋值:
a+=b# 等价于 a = a + ba-=b# 等价于 a = a - ba*=b# 等价于 a = a * ba/=b# 等价于 a = a / ba//=b# 等价于 a = a // ba%=b# 等价于 a = a % ba**=b# 等价于 a = a ** b2.3 海象运算符
Python 3.8 引入的:=(海象运算符),可以在表达式内部赋值:
print(my_var:="Hello World!")# 赋值的同时使用值它的典型场景是在while或if中同时赋值和判断,减少重复计算。
2.4 逻辑运算符
is_admin=Trueis_logged_in=Trueprint(f"is_admin and is_logged_in:{is_adminandis_logged_in}")# Trueprint(f"is_admin or is_logged_in:{is_adminoris_logged_in}")# Trueprint(f"not is_admin:{notis_admin}")# False# Python 特有的链式比较is_valid=5<a<=15# Trueprint(f"is_valid:{is_valid}")链式比较是 Python 的一个优雅特性,5 < a <= 15等价于5 < a and a <= 15,但写起来更自然。
一句话总结:Python 运算符不难,但//、:=、链式比较这几个特性值得刻意记住,用好了能让代码更简洁。
3. 字符串:文本处理的瑞士军刀
字符串是日常开发中打交道最多的类型,Python 提供了极其丰富的字符串操作方法。
3.1 基本操作
text="Python Programming"print(text[0:6])# "Python" (切片: [起始:结束])print(text[::-1])# "gnimmargorP nohtyP" (反转字符串)print(text.upper())# "PYTHON PROGRAMMING"3.2 特殊字符串
原始字符串(r前缀):将反斜杠视为字面字符
print(r"Hello there!\nHow are you?")# \n 按字面意思打印,不会换行多行字符串:用三个引号包裹
multiply_text=""" Dear Alice, Eve's cat has been arrested for catnapping, cat burglary, and extortion. Sincerely, Bob """3.3 常用方法速查
spam='hello world!'print(spam.upper())# 'HELLO WORLD!'print(spam.lower())# 'hello world!'print(spam.title())# 'Hello World!'print(spam.isalpha())# False (含空格和!)print(spam.isalnum())# Falseprint(spam.isdecimal())# Falseprint(spam.isspace())# Falseprint(spam.startswith('hello'))# Trueprint(spam.endswith('world'))# False (注意有 !)3.4 join 与 split
这是一对互逆操作,非常常用:
# join: 列表 -> 字符串name=["Alice","Bob","Charlie"]print(''.join(name))# AliceBobCharlieprint('-'.join(name))# Alice-Bob-Charlieprint(','.join(name))# Alice,Bob,Charlie# split: 字符串 -> 列表spam='hello world!'print(spam.split(' '))# ['hello', 'world!']print('My,name,is,Simon'.split(','))# ['My', 'name', 'is', 'Simon']3.5 strip 家族
spam2=' Hello World 'print(spam2.strip())# 'Hello World' (去除两端空格)print(spam2.lstrip())# 'Hello World ' (去除左端空格)print(spam2.rstrip())# ' Hello World' (去除右端空格)3.6 其他实用方法
print(spam2.count('H'))# 统计字符出现次数print(spam2.upper().count('H'))# 忽略大小写统计print(spam2.replace('Hello','Hi'))# 替换子串3.7 字符串格式化
Python 有三种格式化方式,推荐使用 f-string:
name='Alice'age=23score=95.51num=1230991# f-string (Python 3.6+) —— 推荐print(f'{num:,}')# 1,230,991 (千分位)print(f'{score:.2f}')# 95.51 (四舍五入)print(f'{score:.2%}')# 9551.00% (百分比)print(f'{age:#x}')# 0x17 (十六进制)# str.format() —— 推荐print('name: {}, age: {}, score: {}'.format(name,age,score))# % 格式化 —— 不推荐print("name:%s"%name)print("age:%d"%age)f-string 不仅写法最简洁,性能也是最好的。从 Python 3.6 开始,没有理由不用它。
一句话总结:字符串方法多到记不住也没关系,记住 join/split/strip/format 这四个核心操作,其他的用到再查。
4. 四大容器:组织数据的四把利器
Python 有四种内置容器类型,各有特点,选对容器是写好代码的第一步。
| 容器 | 有序 | 可变 | 允许重复 | 典型场景 |
|---|---|---|---|---|
| 列表 List | 是 | 是 | 是 | 有序集合,增删改查 |
| 元组 Tuple | 是 | 否 | 是 | 不可变数据,函数返回多值 |
| 集合 Set | 否 | 是 | 否 | 去重,集合运算 |
| 字典 Dict | 否 | 是 | 键唯一 | 键值映射,配置项 |
students=['alice','bob','red','cat']# 列表names=("Alice","Bob")# 元组tags={"python","java","python","c++"}# 集合user={"name":"Gemini","age":1}# 字典4.1 列表 List
列表是最常用的容器,有序、可变、允许重复。
增:
students=['alice','bob','red','cat']students.append('alice')# 末尾追加students.insert(5,'alice')# 指定位置插入删:
delstudents[0]# 按索引删除students.remove('bob')# 按值删除(只删第一个匹配)改:
students[0]='alice22'# 按索引修改查:
print(students)# 打印整个列表print(students[1:2])# 切片获取子列表print(students[:2])# 前两个元素print(students[1:])# 从第二个到末尾print(students[-1])# 最后一个元素print(len(students))# 列表长度print('alice'instudents)# 成员判断print(students.count('alice'))# 出现次数print(students.index('alice'))# 首次出现下标遍历:
forstuinstudents:# 直接遍历print(stu)foriinrange(len(students)):# 按索引遍历print(students[i])拼接与 zip:
teachers=['alice','bob','red','cat']all=students+teachers# 列表拼接forstu,teainzip(students,teachers):# 多列表并行遍历print(stu,tea)排序:
scores=[100,78,78,67,90]scores.sort()# 升序排序print(max(scores),min(scores),sum(scores))# 最大、最小、求和scores.reverse()# 反转scores.sort(key=None,reverse=True)# 降序排序4.2 元组 Tuple
元组是不可变的列表,一旦创建就不能增删改。
tuple1=(1,2,3,4,5)print(tuple1[0:2])# 支持切片print(tuple1[:2])# (1, 2)# 不支持:tuple1[0] = 10 → TypeError类型转换是元组的常见用法:
names=['alice','bob','red','cat']tuple2=tuple(names)# 列表 -> 元组list2=list(tuple2)# 元组 -> 列表什么时候用元组?当数据不应该被修改时,比如函数返回多个值、常量配置等。元组的不可变性是一种"安全约束"。
4.3 集合 Set
集合是去重神器,无序、可变、不允许重复。
增删改查:
set1={1,2,3,3,4,1}set1.add(6)# 增set1.remove(1)# 删(不存在会报 KeyError)set1.discard(2)# 删(安全,缺失不报错)set1.update({4,5})# 批量增print(len(set1))# 长度print(1inset1)# 成员判断removevsdiscard的区别要记住:remove在元素不存在时抛出KeyError,discard静默跳过。实际开发中discard更安全。
集合运算是集合最强大的特性:
set2=set("abcde")set3=set("defgh")print(set2-set3)# 差集:a中包含而b中不包含的元素print(set2|set3)# 并集:a或b中包含的所有元素print(set2&set3)# 交集:a和b中都包含了的元素print(set2^set3)# 对称差集:不同时包含于a和b的元素4.4 字典 Dict
字典是键值对,键必须唯一且不可变,值可以任意。
增删改查:
stuInfo={"name":"zhangsan","age":23}# 增stuInfo.setdefault("city","上海")# 键不存在时才设置# 删delstuInfo["name"]# 删除键值对stuInfo.pop("name")# 删除并返回值# 改stuInfo["age"]=24# 键存在则修改# 查print(stuInfo["name"])# 按键取值print(stuInfo.keys())# 所有键print(stuInfo.values())# 所有值print(stuInfo.items())# 所有键值对print("name"instuInfo.keys())# 键是否存在print("zhupeng"instuInfo.values())# 值是否存在遍历:
forkeyinstuInfo.keys():# 遍历键print(key,stuInfo[key])forkey,valueinstuInfo.items():# 遍历键值对(推荐)print(key,value)4.5 容器间的类型转换
字符串和容器之间可以互相转换:
str_val='123123'print(list(str_val))# ['1', '2', '3', '1', '2', '3']print(set(str_val))# {'1', '2', '3'}(自动去重)一句话总结:列表用于有序集合,元组用于不可变数据,集合用于去重和运算,字典用于键值映射——选对容器,代码就对了大半。
5. 流程控制:让程序拥有判断力
5.1 条件判断 if / elif / else
Python 的条件判断用if、elif、else,注意没有大括号,靠缩进划分代码块。
嵌套 if:
num=int(input("input a number: "))ifnum%2==0:ifnum%3==0:print("你输入的数字可以整除 2 和 3")else:print("你输入的数字可以整除 2,但不能整除 3")else:ifnum%3==0:print("你输入的数字可以整除 3,但不能整除 2")else:print("你输入的数字不能整除 2 和 3")elif 多分支:
age=int(input("请输入你家狗狗的年龄: "))ifage<=0:print("你是在逗我吧!")elifage==1:print("相当于 14 岁的人。")elifage==2:print("相当于 22 岁的人。")elifage>2:human=22+(age-2)*5print("对应人类年龄: ",human)5.2 三目运算符
Python 的三目运算符写法是值1 if 条件 else 值2:
age=10print('未成年'ifage<18else'成年')# 未成年5.3 match-case(Python 3.10+)
Python 3.10 引入了match-case,类似于其他语言的switch:
基本用法:
response_code=201matchresponse_code:case200:print("OK")case201:print("Created")case404:print("404 Not Found")case500:print("Internal Server Error")|合并多个匹配值:
response_code=502matchresponse_code:case200|201:print("OK")case300|307:print("Redirect")case500|502:print("Internal Server Error")case_:# _ 相当于 defaultprint("Unknown")_是通配符,相当于其他语言switch中的default。如果不加_,没有任何匹配时程序不会报错,但也不会执行任何分支。
5.4 while 循环
count=1sum=0whilecount<=100:sum+=count count+=1else:print(count,"大于100,结束")print(sum)# 5050while...else是 Python 的特色语法:当循环正常结束(没有被break打断)时,else块会执行。这个特性很多人不知道,但在某些场景下很有用。
5.5 for 循环
经典用法——找质数:
forninrange(2,10):forxinrange(2,n):ifn%x==0:print(n,'equals',x,'*',n//x)breakelse:# 这个 else 属于 for 循环,不是 if!# 当循环没被 break 打断时才执行print(n,'is a prime number')注意这里else属于for循环,不是if!这是 Python 中最容易让人困惑的语法之一。for...else的含义是:如果循环没有被break终止,就执行else块。在这个例子中,如果一个数没有被任何因子整除(即没有触发break),它就是质数。
break 与 continue:
forxinrange(5,10):ifx%2==0:print("找到偶数: ",x)continue# 跳过本次迭代,继续下一轮print(x)else:print("循环正常结束")| 关键字 | 作用 | 触发 else 吗? |
|---|---|---|
break | 跳出整个循环 | 否 |
continue | 跳过本次迭代 | 是(循环最终正常结束就行) |
5.6 pass 语句
pass不执行任何操作,通常用作占位符:
deftodo_function():pass# 以后再实现一句话总结:Python 流程控制最需要注意的三个坑:缩进、for...else的语义、match-case是 3.10+ 才有的新语法。
6. 总结
通过这次梳理,我们把 Python 基础的三大板块串联了起来:
- 数据类型是地基,搞清楚每种类型的语义边界比死记硬背更重要
- 四大容器各有分工——列表有序可变、元组不可变、集合去重、字典键值对——选对容器,代码就对了大半
- 流程控制让程序拥有判断力,
for...else和match-case是两个值得特别留意的语法
如果用一句话总结:
Python 的设计哲学是"用最自然的方式表达意图"——从链式比较到海象运算符,从 f-string 到 for…else,每个特性都在让你写出更接近人类思维方式的代码。
当你不再只是记住语法规则,而是理解每个特性"为什么要这样设计"时,Python 才真正开始变成你手中的工具,而不是你需要反复查阅的手册。
如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,你们的支持就是我坚持下去的动力!