Python 基础笔记
知识结构
变量与数据类型
基本类型
Python 有几种基本数据类型:
- str(字符串):用引号包裹的文本,如
"hello" - int(整数):没有小数点的数字,如
42 - float(浮点数):带小数点的数字,如
3.14 - bool(布尔值):只有
True或False两个值
使用 type() 函数可以查看变量的类型。
类型转换
不同类型之间可以相互转换:
int()转为整数float()转为浮点数str()转为字符串
字符串
基本操作
字符串是最常用的数据类型之一。Python 提供了很多内置方法来操作字符串:
len()获取长度.upper()转大写.lower()转小写
切片
切片是获取字符串(或列表)一部分的方式,语法是 [start:end:step]:
text[0:5]从索引 0 到 4(不包含 5)text[-7:]从倒数第 7 个到末尾text[::2]每隔一个字符取一个
f-string 格式化
f-string 是 Python 3.6+ 推荐的字符串格式化方式,在字符串前加 f,然后用 {} 包裹变量或表达式:
分割与连接
.split()将字符串按指定分隔符拆分成列表"分隔符".join()将列表元素用分隔符连接成字符串
列表
列表(List)是 Python 中最常用的数据结构,用方括号 [] 表示,可以存储任意类型的元素,且可以修改。
创建与访问
- 使用索引访问元素,索引从 0 开始
- 负数索引从末尾开始,
-1表示最后一个元素 - 切片语法同字符串
添加元素
.append()在末尾添加元素.insert(位置, 值)在指定位置插入元素
删除元素
.pop()删除并返回最后一个元素(也可指定索引).remove(值)删除第一个匹配的元素
列表推导式
列表推导式是创建列表的简洁语法,格式为 [表达式 for 变量 in 可迭代对象]:
还可以加条件过滤,格式为 [表达式 for 变量 in 可迭代对象 if 条件]:
元组
元组(Tuple)用圆括号 () 表示,与列表类似但不可修改。常用于存储不应改变的数据。
创建与解包
解包是将元组的元素分别赋值给多个变量:
作为函数返回值
函数可以返回多个值,实际上是返回一个元组:
字典
字典(Dict)用花括号 {} 表示,存储键值对。键必须唯一且不可变(通常用字符串),值可以是任意类型。
创建与访问
dict["key"]访问值,键不存在会报错dict.get("key", 默认值)安全访问,键不存在返回默认值
添加与修改
直接通过键赋值即可添加或修改:
遍历
使用 .items() 同时遍历键和值:
字典推导式
类似列表推导式,格式为 {键: 值 for 变量 in 可迭代对象}:
集合
集合(Set)用花括号 {} 表示,特点是元素唯一(自动去重)且无序。
基本操作
集合运算
集合支持数学上的集合运算:
|并集:两个集合的所有元素&交集:两个集合共有的元素-差集:在 A 中但不在 B 中的元素
条件语句
if-elif-else
Python 使用缩进来表示代码块,if 后的条件为真时执行对应代码块:
三元表达式
单行条件表达式,格式为 值1 if 条件 else 值2:
match-case (Python 3.10+)
类似其他语言的 switch-case,用于多条件匹配:
循环
for 循环
for 循环用于遍历可迭代对象。range(n) 生成 0 到 n-1 的整数序列:
enumerate
enumerate() 在遍历时同时获取索引和值:
while 循环
while 循环在条件为真时持续执行:
break 与 continue
break立即退出整个循环continue跳过本次循环,进入下一次
函数
函数是组织代码的基本单元,使用 def 关键字定义。
基本定义
默认参数
参数可以设置默认值,调用时可省略:
*args 可变参数
*args 接收任意数量的位置参数,在函数内部是一个元组:
**kwargs 关键字参数
**kwargs 接收任意数量的关键字参数,在函数内部是一个字典:
lambda 表达式
lambda 是创建匿名函数的简洁方式,格式为 lambda 参数: 表达式:
map 函数
map() 对可迭代对象的每个元素应用函数:
filter 函数
filter() 过滤出符合条件的元素:
类与对象
Python 是面向对象的语言。类(Class)是对象的模板,对象是类的实例。
基本类
__init__是构造方法,创建对象时自动调用self代表对象自身,必须是方法的第一个参数
继承
子类可以继承父类的属性和方法,使用 super() 调用父类方法:
方法重写
子类可以重新定义父类的方法:
生成器
生成器是一种特殊的迭代器,使用 yield 关键字。与普通函数不同,生成器不会一次性返回所有结果,而是每次调用时返回一个值,节省内存。
yield 基础
yield 暂停函数并返回值,下次调用时从暂停处继续:
生成器表达式
类似列表推导式,但用圆括号,返回生成器对象:
无限生成器
生成器可以表示无限序列(因为值是按需生成的):
装饰器
装饰器是 Python 中一个非常实用的特性,它可以在不修改原函数代码的情况下,给函数添加新功能。
为什么需要装饰器?
假设你有很多函数,你想在每个函数执行前打印一句话。笨办法是去每个函数里加代码,但如果有 100 个函数呢?装饰器就是为了解决这个问题。
装饰器的本质:函数包装函数
装饰器本质上就是一个”包装工”——它接收一个函数,返回一个新函数。这个新函数会在原函数的基础上做一些额外的事情。
@ 语法糖
上面的 say_hi = my_decorator(say_hi) 写起来有点麻烦。Python 提供了 @ 符号作为语法糖(简写),效果完全一样:
实际例子:计时器
一个常见的用途是测量函数执行时间:
处理带参数的函数
如果原函数有参数怎么办?用 *args 和 **kwargs 接收任意参数,再原样传给原函数:
带参数的装饰器
有时候我们希望装饰器本身也能接收参数,比如”重复执行 N 次”。这需要多套一层函数:
多个装饰器叠加
可以给一个函数加多个装饰器,从下往上依次包装:
常见内置装饰器
Python 有几个常用的内置装饰器:
异常处理
异常处理让程序在遇到错误时不会崩溃,而是执行预设的处理逻辑。
try-except
try 块中的代码如果出错,会跳转到对应的 except 块:
try-except-else-finally
完整结构:
try:尝试执行的代码except:出错时执行else:没出错时执行finally:无论是否出错都执行(通常用于清理资源)
自定义异常
通过继承 Exception 类创建自定义异常,用 raise 抛出:
上下文管理器
上下文管理器通过 with 语句自动管理资源(如文件、连接),确保使用后正确关闭或释放。
使用类实现
实现 __enter__ 和 __exit__ 方法:
__enter__在进入with块时调用__exit__在离开with块时调用(即使出错也会执行)
使用 contextmanager
@contextmanager 装饰器简化创建上下文管理器,yield 之前是进入时执行的代码,之后是退出时执行的代码:
常用内置函数
Python 提供了很多实用的内置函数,无需导入即可使用。
range
range() 生成整数序列,常用于 for 循环:
range(n)生成 0 到 n-1range(start, end)生成 start 到 end-1range(start, end, step)指定步长
倒序生成需要设置负数步长:
print() 输出内容到控制台:
sep参数设置多个值之间的分隔符(默认空格)end参数设置结尾字符(默认换行)
input
input() 从用户获取输入,返回字符串。在沙盒中无法交互,这里展示基本用法:
name = input("请输入姓名: ")age = int(input("请输入年龄: ")) # 需要转换类型print(f"你好, {name}! 你 {age} 岁了。")abs 与 round
abs()返回绝对值round()四舍五入,可指定小数位数
pow 与 divmod
pow(x, y)计算 x 的 y 次方,等同于x ** ydivmod(x, y)同时返回商和余数
type 与 isinstance
type()返回对象的类型isinstance()判断对象是否是某类型的实例(推荐)
id 与 hash
id()返回对象的唯一标识(内存地址)hash()返回对象的哈希值(用于字典键)
len, max, min, sum
常用的聚合函数:
sorted 与 reversed
sorted()返回排序后的新列表reversed()返回反转的迭代器
zip
zip() 将多个可迭代对象打包成元组的迭代器,常用于并行遍历:
all 与 any
all()所有元素为真时返回 Trueany()任一元素为真时返回 True
bin, oct, hex
进制转换函数:
bin()转二进制字符串oct()转八进制字符串hex()转十六进制字符串
chr 与 ord
字符与 Unicode 码点的转换:
chr(n)返回 Unicode 码点 n 对应的字符ord(c)返回字符 c 的 Unicode 码点
callable
callable() 判断对象是否可调用(如函数、类、带 __call__ 方法的对象):
hasattr, getattr, setattr
动态操作对象属性:
hasattr(obj, name)判断是否有属性getattr(obj, name, default)获取属性值setattr(obj, name, value)设置属性值
dir
dir() 列出对象的所有属性和方法,常用于探索对象:
vars 与 locals
vars(obj)返回对象的__dict__属性locals()返回当前作用域的局部变量字典
eval 与 exec
eval()执行表达式并返回结果exec()执行代码块(无返回值)
注意:避免对用户输入使用这两个函数,有安全风险!
open
open() 用于打开文件,通常配合 with 语句使用。沙盒中无法操作文件,这里展示基本用法:
# 读取文件with open("file.txt", "r", encoding="utf-8") as f: content = f.read()
# 写入文件with open("file.txt", "w", encoding="utf-8") as f: f.write("Hello, World!")
# 追加内容with open("file.txt", "a", encoding="utf-8") as f: f.write("\n新的一行")
# 逐行读取with open("file.txt", "r") as f: for line in f: print(line.strip())常用模式:
"r"只读(默认)"w"写入(覆盖)"a"追加"rb"/"wb"二进制模式
NumPy 基础
NumPy 是 Python 科学计算的基础库,提供高性能的多维数组对象。
创建与基本操作
数组运算
NumPy 数组支持向量化运算,比 Python 列表循环快得多: