Python 基础笔记

知识结构

变量与数据类型

基本类型

Python 有几种基本数据类型:

  • str(字符串):用引号包裹的文本,如 "hello"
  • int(整数):没有小数点的数字,如 42
  • float(浮点数):带小数点的数字,如 3.14
  • bool(布尔值):只有 TrueFalse 两个值

使用 type() 函数可以查看变量的类型。

Loading Pyodide...
First load requires ~15MB download

类型转换

不同类型之间可以相互转换:

  • int() 转为整数
  • float() 转为浮点数
  • str() 转为字符串
Loading Pyodide...
First load requires ~15MB download

字符串

基本操作

字符串是最常用的数据类型之一。Python 提供了很多内置方法来操作字符串:

  • len() 获取长度
  • .upper() 转大写
  • .lower() 转小写
Loading Pyodide...
First load requires ~15MB download

切片

切片是获取字符串(或列表)一部分的方式,语法是 [start:end:step]

  • text[0:5] 从索引 0 到 4(不包含 5)
  • text[-7:] 从倒数第 7 个到末尾
  • text[::2] 每隔一个字符取一个
Loading Pyodide...
First load requires ~15MB download

f-string 格式化

f-string 是 Python 3.6+ 推荐的字符串格式化方式,在字符串前加 f,然后用 {} 包裹变量或表达式:

Loading Pyodide...
First load requires ~15MB download

分割与连接

  • .split() 将字符串按指定分隔符拆分成列表
  • "分隔符".join() 将列表元素用分隔符连接成字符串
Loading Pyodide...
First load requires ~15MB download

列表

列表(List)是 Python 中最常用的数据结构,用方括号 [] 表示,可以存储任意类型的元素,且可以修改。

创建与访问

  • 使用索引访问元素,索引从 0 开始
  • 负数索引从末尾开始,-1 表示最后一个元素
  • 切片语法同字符串
Loading Pyodide...
First load requires ~15MB download

添加元素

  • .append() 在末尾添加元素
  • .insert(位置, 值) 在指定位置插入元素
Loading Pyodide...
First load requires ~15MB download

删除元素

  • .pop() 删除并返回最后一个元素(也可指定索引)
  • .remove(值) 删除第一个匹配的元素
Loading Pyodide...
First load requires ~15MB download

列表推导式

列表推导式是创建列表的简洁语法,格式为 [表达式 for 变量 in 可迭代对象]

Loading Pyodide...
First load requires ~15MB download

还可以加条件过滤,格式为 [表达式 for 变量 in 可迭代对象 if 条件]

Loading Pyodide...
First load requires ~15MB download

元组

元组(Tuple)用圆括号 () 表示,与列表类似但不可修改。常用于存储不应改变的数据。

创建与解包

解包是将元组的元素分别赋值给多个变量:

Loading Pyodide...
First load requires ~15MB download

作为函数返回值

函数可以返回多个值,实际上是返回一个元组:

Loading Pyodide...
First load requires ~15MB download

字典

字典(Dict)用花括号 {} 表示,存储键值对。键必须唯一且不可变(通常用字符串),值可以是任意类型。

创建与访问

  • dict["key"] 访问值,键不存在会报错
  • dict.get("key", 默认值) 安全访问,键不存在返回默认值
Loading Pyodide...
First load requires ~15MB download

添加与修改

直接通过键赋值即可添加或修改:

Loading Pyodide...
First load requires ~15MB download

遍历

使用 .items() 同时遍历键和值:

Loading Pyodide...
First load requires ~15MB download

字典推导式

类似列表推导式,格式为 {键: 值 for 变量 in 可迭代对象}

Loading Pyodide...
First load requires ~15MB download

集合

集合(Set)用花括号 {} 表示,特点是元素唯一(自动去重)且无序

基本操作

Loading Pyodide...
First load requires ~15MB download

集合运算

集合支持数学上的集合运算:

  • | 并集:两个集合的所有元素
  • & 交集:两个集合共有的元素
  • - 差集:在 A 中但不在 B 中的元素
Loading Pyodide...
First load requires ~15MB download

条件语句

if-elif-else

Python 使用缩进来表示代码块,if 后的条件为真时执行对应代码块:

Loading Pyodide...
First load requires ~15MB download

三元表达式

单行条件表达式,格式为 值1 if 条件 else 值2

Loading Pyodide...
First load requires ~15MB download

match-case (Python 3.10+)

类似其他语言的 switch-case,用于多条件匹配:

Loading Pyodide...
First load requires ~15MB download

循环

for 循环

for 循环用于遍历可迭代对象。range(n) 生成 0 到 n-1 的整数序列:

Loading Pyodide...
First load requires ~15MB download

enumerate

enumerate() 在遍历时同时获取索引和值:

Loading Pyodide...
First load requires ~15MB download

while 循环

while 循环在条件为真时持续执行:

Loading Pyodide...
First load requires ~15MB download

break 与 continue

  • break 立即退出整个循环
  • continue 跳过本次循环,进入下一次
Loading Pyodide...
First load requires ~15MB download

函数

函数是组织代码的基本单元,使用 def 关键字定义。

基本定义

Loading Pyodide...
First load requires ~15MB download

默认参数

参数可以设置默认值,调用时可省略:

Loading Pyodide...
First load requires ~15MB download

*args 可变参数

*args 接收任意数量的位置参数,在函数内部是一个元组:

Loading Pyodide...
First load requires ~15MB download

**kwargs 关键字参数

**kwargs 接收任意数量的关键字参数,在函数内部是一个字典:

Loading Pyodide...
First load requires ~15MB download

lambda 表达式

lambda 是创建匿名函数的简洁方式,格式为 lambda 参数: 表达式

Loading Pyodide...
First load requires ~15MB download

map 函数

map() 对可迭代对象的每个元素应用函数:

Loading Pyodide...
First load requires ~15MB download

filter 函数

filter() 过滤出符合条件的元素:

Loading Pyodide...
First load requires ~15MB download

类与对象

Python 是面向对象的语言。类(Class)是对象的模板,对象是类的实例。

基本类

  • __init__ 是构造方法,创建对象时自动调用
  • self 代表对象自身,必须是方法的第一个参数
Loading Pyodide...
First load requires ~15MB download

继承

子类可以继承父类的属性和方法,使用 super() 调用父类方法:

Loading Pyodide...
First load requires ~15MB download

方法重写

子类可以重新定义父类的方法:

Loading Pyodide...
First load requires ~15MB download

生成器

生成器是一种特殊的迭代器,使用 yield 关键字。与普通函数不同,生成器不会一次性返回所有结果,而是每次调用时返回一个值,节省内存。

yield 基础

yield 暂停函数并返回值,下次调用时从暂停处继续:

Loading Pyodide...
First load requires ~15MB download

生成器表达式

类似列表推导式,但用圆括号,返回生成器对象:

Loading Pyodide...
First load requires ~15MB download

无限生成器

生成器可以表示无限序列(因为值是按需生成的):

Loading Pyodide...
First load requires ~15MB download

装饰器

装饰器是 Python 中一个非常实用的特性,它可以在不修改原函数代码的情况下,给函数添加新功能

为什么需要装饰器?

假设你有很多函数,你想在每个函数执行前打印一句话。笨办法是去每个函数里加代码,但如果有 100 个函数呢?装饰器就是为了解决这个问题。

Loading Pyodide...
First load requires ~15MB download

装饰器的本质:函数包装函数

装饰器本质上就是一个”包装工”——它接收一个函数,返回一个新函数。这个新函数会在原函数的基础上做一些额外的事情。

Loading Pyodide...
First load requires ~15MB download

@ 语法糖

上面的 say_hi = my_decorator(say_hi) 写起来有点麻烦。Python 提供了 @ 符号作为语法糖(简写),效果完全一样:

Loading Pyodide...
First load requires ~15MB download

实际例子:计时器

一个常见的用途是测量函数执行时间:

Loading Pyodide...
First load requires ~15MB download

处理带参数的函数

如果原函数有参数怎么办?用 *args**kwargs 接收任意参数,再原样传给原函数:

Loading Pyodide...
First load requires ~15MB download

带参数的装饰器

有时候我们希望装饰器本身也能接收参数,比如”重复执行 N 次”。这需要多套一层函数:

Loading Pyodide...
First load requires ~15MB download

多个装饰器叠加

可以给一个函数加多个装饰器,从下往上依次包装:

Loading Pyodide...
First load requires ~15MB download

常见内置装饰器

Python 有几个常用的内置装饰器:

Loading Pyodide...
First load requires ~15MB download

异常处理

异常处理让程序在遇到错误时不会崩溃,而是执行预设的处理逻辑。

try-except

try 块中的代码如果出错,会跳转到对应的 except 块:

Loading Pyodide...
First load requires ~15MB download

try-except-else-finally

完整结构:

  • try:尝试执行的代码
  • except:出错时执行
  • else:没出错时执行
  • finally:无论是否出错都执行(通常用于清理资源)
Loading Pyodide...
First load requires ~15MB download

自定义异常

通过继承 Exception 类创建自定义异常,用 raise 抛出:

Loading Pyodide...
First load requires ~15MB download

上下文管理器

上下文管理器通过 with 语句自动管理资源(如文件、连接),确保使用后正确关闭或释放。

使用类实现

实现 __enter____exit__ 方法:

  • __enter__ 在进入 with 块时调用
  • __exit__ 在离开 with 块时调用(即使出错也会执行)
Loading Pyodide...
First load requires ~15MB download

使用 contextmanager

@contextmanager 装饰器简化创建上下文管理器,yield 之前是进入时执行的代码,之后是退出时执行的代码:

Loading Pyodide...
First load requires ~15MB download

常用内置函数

Python 提供了很多实用的内置函数,无需导入即可使用。

range

range() 生成整数序列,常用于 for 循环:

  • range(n) 生成 0 到 n-1
  • range(start, end) 生成 start 到 end-1
  • range(start, end, step) 指定步长
Loading Pyodide...
First load requires ~15MB download

倒序生成需要设置负数步长:

Loading Pyodide...
First load requires ~15MB download

print

print() 输出内容到控制台:

  • sep 参数设置多个值之间的分隔符(默认空格)
  • end 参数设置结尾字符(默认换行)
Loading Pyodide...
First load requires ~15MB download

input

input() 从用户获取输入,返回字符串。在沙盒中无法交互,这里展示基本用法:

name = input("请输入姓名: ")
age = int(input("请输入年龄: ")) # 需要转换类型
print(f"你好, {name}! 你 {age} 岁了。")

abs 与 round

  • abs() 返回绝对值
  • round() 四舍五入,可指定小数位数
Loading Pyodide...
First load requires ~15MB download

pow 与 divmod

  • pow(x, y) 计算 x 的 y 次方,等同于 x ** y
  • divmod(x, y) 同时返回商和余数
Loading Pyodide...
First load requires ~15MB download

type 与 isinstance

  • type() 返回对象的类型
  • isinstance() 判断对象是否是某类型的实例(推荐)
Loading Pyodide...
First load requires ~15MB download

id 与 hash

  • id() 返回对象的唯一标识(内存地址)
  • hash() 返回对象的哈希值(用于字典键)
Loading Pyodide...
First load requires ~15MB download

len, max, min, sum

常用的聚合函数:

Loading Pyodide...
First load requires ~15MB download

sorted 与 reversed

  • sorted() 返回排序后的新列表
  • reversed() 返回反转的迭代器
Loading Pyodide...
First load requires ~15MB download

zip

zip() 将多个可迭代对象打包成元组的迭代器,常用于并行遍历:

Loading Pyodide...
First load requires ~15MB download

all 与 any

  • all() 所有元素为真时返回 True
  • any() 任一元素为真时返回 True
Loading Pyodide...
First load requires ~15MB download

bin, oct, hex

进制转换函数:

  • bin() 转二进制字符串
  • oct() 转八进制字符串
  • hex() 转十六进制字符串
Loading Pyodide...
First load requires ~15MB download

chr 与 ord

字符与 Unicode 码点的转换:

  • chr(n) 返回 Unicode 码点 n 对应的字符
  • ord(c) 返回字符 c 的 Unicode 码点
Loading Pyodide...
First load requires ~15MB download

callable

callable() 判断对象是否可调用(如函数、类、带 __call__ 方法的对象):

Loading Pyodide...
First load requires ~15MB download

hasattr, getattr, setattr

动态操作对象属性:

  • hasattr(obj, name) 判断是否有属性
  • getattr(obj, name, default) 获取属性值
  • setattr(obj, name, value) 设置属性值
Loading Pyodide...
First load requires ~15MB download

dir

dir() 列出对象的所有属性和方法,常用于探索对象:

Loading Pyodide...
First load requires ~15MB download

vars 与 locals

  • vars(obj) 返回对象的 __dict__ 属性
  • locals() 返回当前作用域的局部变量字典
Loading Pyodide...
First load requires ~15MB download

eval 与 exec

  • eval() 执行表达式并返回结果
  • exec() 执行代码块(无返回值)

注意:避免对用户输入使用这两个函数,有安全风险!

Loading Pyodide...
First load requires ~15MB download

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 科学计算的基础库,提供高性能的多维数组对象。

创建与基本操作

Loading Pyodide...
First load requires ~15MB download

数组运算

NumPy 数组支持向量化运算,比 Python 列表循环快得多:

Loading Pyodide...
First load requires ~15MB download

Read Next

Generator in JavaScript

Read Previous

Java 基础教程