数据容器
列表(List)
列表是 Python 中最常用的线性容器,使用方括号定义,元素有序且可以重复,支持增删改查和切片操作。
fruits = ["apple", "banana", "cherry"] fruits.append("orange") # 末尾追加 print(fruits[0]) # 按索引访问 print(fruits[1:3]) # 切片切片(Slicing)
切片是 Python 中提取序列子集的核心语法,适用于列表、字符串、元组等有序容器。基本格式为序列[起始:结束:步长],其中起始和结束位置可省略,步长默认为 1。
nums = [0, 1, 2, 3, 4, 5] print(nums[1:4]) # [1, 2, 3],含头不含尾 print(nums[:3]) # [0, 1, 2],省略起始 print(nums[3:]) # [3, 4, 5],省略结束 print(nums[::2]) # [0, 2, 4],步长为 2 print(nums[::-1]) # [5, 4, 3, 2, 1, 0],倒序切片同样适用于字符串和元组,返回对应类型的新对象,不会修改原数据。
text = "Python" print(text[0:3]) # "Pyt" print(text[::-1]) # "nohtyP" tup = (1, 2, 3, 4) print(tup[1:3]) # (2, 3)列表推导式(List Comprehension)
列表推导式是 Python 中快速生成列表的简洁语法,基本格式为[表达式 for 变量 in 可迭代对象],可配合条件判断进行过滤。
squares = [x * x for x in range(6)] print(squares) # [0, 1, 4, 9, 16, 25] evens = [x for x in range(10) if x % 2 == 0] print(evens) # [0, 2, 4, 6, 8] words = ["apple", "banana", "cherry"] lengths = [len(w) for w in words] print(lengths) # [5, 6, 6]列表推导式也支持嵌套循环,常用于扁平化二维数据或生成组合。
matrix = [[1, 2], [3, 4], [5, 6]] flat = [num for row in matrix for num in row] print(flat) # [1, 2, 3, 4, 5, 6] pairs = [(x, y) for x in range(3) for y in range(2)] print(pairs) # [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]字符串(String)
字符串是不可变的字符序列,使用单引号或双引号定义,支持索引、切片、拼接和格式化等操作。
name = "Python" print(name[0]) # 取第一个字符 print(name.upper()) # 转大写 print(len(name)) # 获取长度元组(Tuple)
元组是不可变的线性容器,使用圆括号定义,元素有序且可以重复,适合存储不允许修改的数据。
point = (3, 5) x, y = point # 解包 print(x, y) # point[0] = 10 # 报错,元组不可修改集合(Set)
集合是无序且不重复的容器,使用花括号定义,适合去重和集合运算,如交集、并集、差集。
a = {1, 2, 3} b = {3, 4, 5} c = set() #空集合 print(a & b) # 交集 print(a | b) # 并集 print(a - b) # 差集字典(Dictionary)
字典是键值对容器,使用花括号加冒号定义,通过键快速访问对应的值,适合关联和查找场景。
person = {"name": "Alice", "age": 25} print(person["name"]) # 按键取值 person["age"] = 26 # 修改值 print(person.keys()) # 获取所有键总结
函数
函数的定义与调用
函数是 Python 中组织代码、实现复用的核心方式。使用def关键字定义函数,基本格式为def 函数名(参数列表):,函数体需要缩进,可通过return返回结果。
def greet(name): """打印问候语""" print(f"Hello, {name}!") def add(a, b): """返回两数之和""" return a + b 调用函数 greet("Alice") # Hello, Alice! result = add(3, 5) print(result) # 8函数参数支持默认值、关键字参数和可变参数,灵活适应不同调用场景。
def introduce(name, age=18, *hobbies): print(f"{name} 今年 {age} 岁") print("爱好:", hobbies) introduce("Bob", 20, "篮球", "阅读") Bob 今年 20 岁 爱好: ('篮球', '阅读') def calc(a, b, **kwargs): print(f"a={a}, b={b}, 其他={kwargs}") calc(1, 2, op="add", level=3) a=1, b=2, 其他={'op': 'add', 'level': 3}函数还可以作为参数传递或作为返回值,这是 Python 函数式编程的基础。
def apply(func, value): return func(value) def double(x): return x * 2 print(apply(double, 5)) # 10 def make_multiplier(n): def multiplier(x): return x * n return multiplier times_3 = make_multiplier(3) print(times_3(7)) # 21全局变量与局部变量
在 Python 中,变量按作用域分为全局变量和局部变量。在函数外部定义的变量是全局变量,可在整个模块中访问;在函数内部定义的变量是局部变量,只能在函数内部使用。
count = 10 # 全局变量 def show(): name = "Alice" # 局部变量 print(count) # 函数内可读取全局变量 print(name) show() print(name) # 报错,局部变量在函数外不可访问当函数内需要修改全局变量时,必须使用global关键字声明,否则 Python 会将其视为新的局部变量。
total = 0 def add_one(): global total # 声明使用全局变量 total += 1 add_one() add_one() print(total) # 2,全局变量被成功修改如果不加global,函数内对同名变量的赋值只会创建局部变量,不会影响全局变量。
value = 100 def try_change(): value = 200 # 未声明 global,创建的是局部变量 print(value) # 200 try_change() print(value) # 100,全局变量未被修改不定长参数与关键字传参
Python 函数支持不定长参数,用于接收数量不固定的实参。使用*args接收任意数量的位置参数,参数会以元组形式传入;使用**kwargs接收任意数量的关键字参数,参数会以字典形式传入。
def collect(*args): print("位置参数:", args) collect(1, 2, 3) # 位置参数: (1, 2, 3) def collect_kw(**kwargs): print("关键字参数:", kwargs) collect_kw(name="Alice", age=25) # 关键字参数: {'name': 'Alice', 'age': 25}关键字传参是指在调用函数时,通过参数名=值的方式显式指定参数,这样不依赖参数顺序,代码可读性更高。
def introduce(name, age, city): print(f"{name} 今年 {age} 岁,来自 {city}") introduce(age=20, city="北京", name="Bob") # 关键字传参,顺序可打乱在实际开发中,*args和**kwargs常组合使用,让函数既能接收任意数量的位置参数,也能接收任意数量的关键字参数。
def show_info(*args, **kwargs): print("位置参数:", args) print("关键字参数:", kwargs) show_info("Python", "Java", level=3, tag="教程") 位置参数: ('Python', 'Java') 关键字参数: {'level': 3, 'tag': '教程'}from typing import List, Dict, Tuple, Set scores: List[int] = [90, 85, 88] person: Dict[str, int] = {"age": 25} point: Tuple[int, int] = (3, 5) tags: Set[str] = {"python", "教程"}对于函数参数,还可以使用Optional表示参数可能为None,使用Union表示参数可以是多种类型之一,让类型表达更加灵活。
类型注解(Type Hints)
def add(a: int, b: int) -> int: return a + b name: str = "Alice" age: int = 25 print(add(3, 5)) # 8类型注解同样适用于容器类型。Python 的typing模块提供了List、Dict、Tuple、Set等泛型标注,可以更精确地描述容器中元素的类型。
from typing import List, Dict, Tuple, Set scores: List[int] = [90, 85, 88] person: Dict[str, int] = {"age": 25} point: Tuple[int, int] = (3, 5) tags: Set[str] = {"python", "教程"}对于函数参数,还可以使用Optional表示参数可能为None,使用Union表示参数可以是多种类型之一,让类型表达更加灵活。
from typing import Optional, Union def greet(name: Optional[str] = None) -> str: if name is None: name = "朋友" return f"你好,{name}!" def parse(value: Union[int, str]) -> str: return str(value) print(greet()) # 你好,朋友! print(greet("Alice")) # 你好,Alice! print(parse(123)) # 123当参数可以是多种类型时,除了Union,Python 3.10 起还支持更简洁的|语法,例如int | str表示参数可以是整数或字符串,写法更直观。
def parse(value: int | str) -> str: return str(value) print(parse(123)) # 123 print(parse("hello")) # hello