Python 术语大揭秘:从基础到进阶的核心概念解析
在 Python 编程世界里,理解各种术语是深入学习和高效开发的基础。本文将带你系统梳理 Python 中的关键术语,涵盖从基础语法到高级特性的丰富内容,帮助你打通学习脉络,深入理解 Python 编程的本质。
Python 术语详解
基础语法相关术语
- 提示符:
>>>
是 Python 交互模式下的默认提示符,在能交互执行代码的示例中常见;...
则在输入带缩进代码块、匹配分隔符内或装饰器后作为交互式 Python 的默认提示符,同时它还是Ellipsis
内置常量。在交互模式下输入代码时,>>>
引导用户输入代码,而当输入多行结构(如函数定义、循环体)时,...
提示符会持续出现,提示用户继续输入内容,直到完成整个代码块的编写。
- 表达式与语句:表达式是能求出某个值的语法单元,比如字面值、函数调用等;而语句是程序段的组成单位,像
if
、while
等带有特定关键字的结构,赋值也属于语句,并非表达式。表达式侧重于求值,例如2 + 3
这个表达式,计算结果为5
;而语句侧重于执行某种操作,if
语句用于条件判断,while
语句用于循环执行代码块。
- 函数与方法:函数是可返回值的语句集合,能接受参数;在类内部定义的函数就是方法,当通过类的实例调用方法时,实例对象会作为方法的第一个参数(通常命名为
self
)。函数还涉及参数(调用时传入的值)和形参(函数定义中的命名实体)的概念,参数分为关键字参数和位置参数 ,形参则有位置或关键字、仅限位置、仅限关键字、可变位置、可变关键字这五种类型。
| |
| def func(foo, bar=None): |
| pass |
| |
| |
| def func_posonly(posonly1, posonly2, /, positional_or_keyword): |
| pass |
| |
| |
| def func_kwonly(arg, *, kw_only1, kw_only2): |
| pass |
| |
| |
| def func_var_positional(*args, **kwargs): |
| pass |
- 装饰器:是返回另一个函数的函数,用于对函数进行变换,常见的如
classmethod()
和staticmethod()
,使用@wrapper
语法,本质是语法糖。装饰器可以在不修改原函数代码的情况下,为函数添加额外功能,如日志记录、性能监测等。
| |
| def log(func): |
| def wrapper(*args, **kwargs): |
| print(f"开始执行{func.__name__}") |
| result = func(*args, **kwargs) |
| print(f"{func.__name__}执行结束") |
| return result |
| return wrapper |
| |
| @log |
| def add(a, b): |
| return a + b |
| |
| add(1, 2) |
- lambda 表达式:由一个单独表达式构成的匿名内联函数,表达式会在调用时被求值。创建 lambda 函数的句法为
lambda [parameters]: expression
。lambda 表达式通常用于需要一个简单函数但又不想单独定义函数的场景,比如作为排序函数的键函数。
| my_list = [(1, 'a'), (3, 'c'), (2, 'b')] |
| sorted_list = sorted(my_list, key=lambda x: x[0]) |
| print(sorted_list) |
- 语句块与缩进:Python 使用缩进来表示语句块,而不是像其他语言(如 C、Java)那样使用大括号。同一缩进级别的代码属于同一个语句块,这使得代码结构更加清晰易读。
| if True: |
| print("这行代码在if语句块内") |
| print("这也是if语句块内的代码") |
| print("这行代码不在if语句块内") |
- 条件语句与循环语句:条件语句主要有
if - elif - else
结构,用于根据不同条件执行不同代码块;循环语句包括for
循环和while
循环,for
循环用于遍历可迭代对象,while
循环则根据条件判断是否继续执行。
| |
| num = 10 |
| if num > 10: |
| print("大于10") |
| elif num == 10: |
| print("等于10") |
| else: |
| print("小于10") |
| |
| |
| fruits = ["apple", "banana", "cherry"] |
| for fruit in fruits: |
| print(fruit) |
| |
| |
| count = 0 |
| while count < 5: |
| print(count) |
| count += 1 |
- 模块与导入:模块是 Python 代码的组织单位,有独立命名空间,可通过
import
操作加载,模块可包含各种 Python 对象。导入机制包括导入路径(sys.path
或上级包的__path__
属性 )、查找器(元路径查找器和路径条目查找器 )、加载器等概念,查找器负责寻找模块的加载器,加载器则负责加载模块。
| |
| import math |
| print(math.sqrt(16)) |
| |
| |
| from datetime import datetime |
| print(datetime.now()) |
- 包与命名空间:包是包含子模块或子包的特殊模块,分为常规包(包含
__init__.py
文件 )和命名空间包(无物理表示,无__init__.py
文件 )。命名空间是存放变量的场所,有局部、全局和内置等不同层级,避免命名冲突,支持模块化开发。
| |
| from mypackage import module1 |
| module1.my_function() |
- 异常处理:Python 通过
try - except - finally
结构进行异常处理,当try
块中的代码出现异常时,会跳转到对应的except
块进行处理,finally
块中的代码无论是否发生异常都会执行。
| try: |
| result = 10 / 0 |
| except ZeroDivisionError: |
| print("除数不能为0") |
| finally: |
| print("无论是否异常,都会执行我") |
- 断言:使用
assert
语句进行断言,用于检查某个条件是否满足,如果不满足则抛出AssertionError
异常。通常用于调试阶段,确保程序的正确性。
| def divide(a, b): |
| assert b != 0, "除数不能为0" |
| return a / b |
| |
| divide(10, 2) |
- 上下文管理器:在
with
语句中通过定义__enter__()
和__exit__()
方法来控制环境状态的对象。常用于文件操作、数据库连接等场景,确保资源的正确管理和释放。
| |
| with open('test.txt', 'w') as f: |
| f.write("Hello, World!") |
- 生成器表达式与列表推导式:生成器表达式是返回迭代器的紧凑表达式,如
sum(i * i for i in range(10))
;列表推导式用于快速生成满足条件的列表,[x for x in range(10) if x % 2 == 0]
。
| |
| gen = (i * 2 for i in range(5)) |
| for num in gen: |
| print(num) |
| |
| |
| even_numbers = [x for x in range(10) if x % 2 == 0] |
| print(even_numbers) |
- 字典推导式与集合推导式:字典推导式用于生成字典,
{n: n ** 2 for n in range(10)}
;集合推导式用于生成集合,{c for c in 'abracadabra' if c not in 'abc'}
。
| |
| squares = {n: n ** 2 for n in range(10)} |
| print(squares) |
| |
| |
| unique_chars = {c for c in 'abracadabra' if c not in 'abc'} |
| print(unique_chars) |
- 切片操作:通常只包含了特定 sequence 的一部分的对象。切片是通过使用下标标记来创建的,在
[]
中给出几个以冒号分隔的数字,例如variable_name[1:3:5]
。方括号(下标)标记在内部使用slice
对象。
| my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
| |
| sub_list = my_list[1:5:2] |
| print(sub_list) |
- 字符串格式化:格式化字符串有多种方式,如使用
%
运算符、format()
方法以及f - 字符串
。f - 字符串
是带有'f'
或'F'
前缀的字符串字面值,是格式化字符串字面值的简写。
| |
| name = "Alice" |
| age = 25 |
| print("我的名字是 %s,年龄是 %d" % (name, age)) |
| |
| |
| print("我的名字是 {},年龄是 {}".format(name, age)) |
| |
| |
| print(f"我的名字是 {name},年龄是 {age}") |
- 位运算:Python 支持按位与(
&
)、按位或(|
)、按位异或(^
)、按位取反(~
)、左移(<<
)和右移(>>
)等位运算,常用于对二进制数据进行操作。
| |
| a = 5 |
| b = 3 |
| print(a & b) |
| print(a | b) |
| print(a ^ b) |
| print(~a) |
| print(a << 2) |
| print(a >> 2) |
- 运算符重载:Python 允许自定义类重载运算符,通过定义特殊方法(如
__add__()
用于重载加法运算符+
),使自定义对象能够像内置类型一样使用运算符进行操作。
| class Vector: |
| def __init__(self, x, y): |
| self.x = x |
| self.y = y |
| |
| def __add__(self, other): |
| return Vector(self.x + other.x, self.y + other.y) |
| |
| def __str__(self): |
| return f"({self.x}, {self.y})" |
| |
| v1 = Vector(1, 2) |
| v2 = Vector(3, 4) |
| v3 = v1 + v2 |
| print(v3) |
- 函数递归:函数在其定义中调用自身的方式称为递归。递归常用于解决可以分解为相似子问题的问题,如计算阶乘、斐波那契数列等,但要注意设置递归终止条件,避免无限递归。
| |
| def factorial(n): |
| if n == 0 or n == 1: |
| return 1 |
| else: |
| return n * factorial(n - 1) |
| |
| print(factorial(5)) |
- 函数式编程概念:Python 支持部分函数式编程特性,如高阶函数(接受函数作为参数或返回函数的函数 )、map ()、filter () 和 reduce () 函数等。这些函数可以对可迭代对象进行高效处理。
| |
| my_list = [1, 2, 3, 4, 5] |
| squared_list = list(map(lambda x: x ** 2, my_list)) |
| print(squared_list) |
| |
| |
| even_list = list(filter(lambda x: x % 2 == 0, my_list)) |
| print(even_list) |
| |
| |
| from functools import reduce |
| product = reduce(lambda x, y: x * y, my_list) |
| print(product) |
- 模块的
__name__
属性:每个模块都有__name__
属性,当模块作为主程序运行时,__name__
的值为__main__
;当模块被导入时,__name__
的值为模块的名称。利用这个属性可以控制模块代码的执行逻辑。
| |
| def my_function(): |
| print("这是模块中的函数") |
| |
| if __name__ == "__main__": |
| print("模块作为主程序运行") |
| my_function() |
- 包的相对导入:在包内,可以使用相对导入来引用其他模块。相对导入使用
from. import module_name
(导入同级模块 )或from.. import module_name
(导入上级包中的模块 )等语法,这种方式可以避免硬编码包名,提高代码的可维护性。
| |
| from. import module2 |
| module2.my_function() |
- 元组解包:可以将元组中的元素解包赋值给多个变量,也可以使用
*
运算符进行部分解包,收集多余的元素。
| |
| my_tuple = (1, 2, 3) |
| a, b, c = my_tuple |
| print(a, b, c) |
| |
| |
| my_tuple = (1, 2, 3, 4, 5) |
| a, *rest, c = my_tuple |
| print(a, rest, c) |
- 列表解包:类似于元组解包,列表也可以进行解包操作,将列表元素赋值给多个变量。
| |
| my_list = [10, 20, 30] |
| x, y, z = my_list |
| print(x, y, z) |
- 字典解包:在函数调用或变量赋值时,可以使用字典解包将字典的键值对作为参数传递或进行合并操作。
| |
| def my_func(a, b, c): |
| print(a, b, c) |
| |
| my_dict = {'a': 1, 'b': 2, 'c': 3} |
| my_func(**my_dict) |
| |
| |
| dict1 = {'a': 1, 'b': 2} |
| dict2 = {'c': 3, 'd': 4} |
| new_dict = {**dict1, **dict2} |
| print(new_dict) |
__future__
模块:from __future__ import <feature>
语句用于指示编译器使用将在未来 Python 版本中成为标准的语法和语义来编译当前模块。通过导入此模块并对其变量求值,可以查看新特性的加入时间和成为默认特性的时间。
| from __future__ import division |
| print(11 / 4) |
globals()
和locals()
函数:globals()
函数返回全局命名空间的字典,locals()
函数返回局部命名空间的字典。这两个函数在调试和动态访问命名空间中的变量时非常有用。
| def my_function(): |
| local_variable = "这是局部变量" |
| print(locals()) |
| |
| my_function() |
| print(globals()) |
exec()
和eval()
函数:exec()
函数用于执行动态生成的 Python 代码字符串,eval()
函数用于计算表达式字符串的值并返回结果。这两个函数在处理动态代码和表达式求值时很有用,但使用时要注意安全性,避免执行恶意代码。
| |
| code = "print('Hello, World!')" |
| exec(code) |
| |
| |
| result = eval("2 + 3 * 4") |
| print(result) |
zip()
函数:zip()
函数用于将多个可迭代对象中的元素按索引配对,返回一个由元组组成的迭代器。常用于将多个列表或其他可迭代对象组合在一起进行处理。
| names = ["Alice", "Bob", "Charlie"] |
| ages = [25, 30, 35] |
| zipped = zip(names, ages) |
| for name, age in zipped: |
| print(f"{name} 年龄是 {age}") |
enumerate()
函数:enumerate()
函数用于遍历可迭代对象时同时获取元素的索引和值,返回一个由包含索引和元素的元组组成的迭代器。
继续
sorted()
函数与列表的sort()
方法:sorted()
是 Python 内置函数,可对任何可迭代对象进行排序并返回新的已排序列表,原可迭代对象不变;列表的sort()
方法则是对列表本身进行排序,无返回值,直接修改原列表。
| |
| my_list = [3, 1, 4, 1, 5, 9] |
| new_sorted_list = sorted(my_list) |
| print(new_sorted_list) |
| print(my_list) |
| |
| |
| my_list.sort() |
| print(my_list) |
reversed()
函数与序列的__reversed__()
方法:reversed()
函数用于返回一个反转的迭代器,适用于各种序列类型;一些序列类型(如列表、元组等)还实现了__reversed__()
方法,作用与reversed()
函数类似,但__reversed__()
方法需要通过对象调用 。
| |
| my_list = [1, 2, 3, 4, 5] |
| reversed_iter = reversed(my_list) |
| print(list(reversed_iter)) |
| |
| |
| my_list = [1, 2, 3, 4, 5] |
| reversed_list = list(my_list.__reversed__()) |
| print(reversed_list) |
map()
、filter()
和reduce()
函数对比:map()
函数对可迭代对象中的每个元素应用指定函数,并返回一个迭代器;filter()
函数用于过滤可迭代对象,返回满足特定条件的元素组成的迭代器;reduce()
函数(需从functools
模块导入 )对可迭代对象进行累积计算 。
函数 |
作用 |
示例 |
map() |
对可迭代对象每个元素应用函数 |
list(map(lambda x: x * 2, [1, 2, 3])) 返回[2, 4, 6] |
filter() |
过滤可迭代对象元素 |
list(filter(lambda x: x % 2 == 0, [1, 2, 3, 4])) 返回[2, 4] |
reduce() |
对可迭代对象累积计算 |
from functools import reduce; reduce(lambda x, y: x + y, [1, 2, 3, 4]) 返回10 |
- 深拷贝与浅拷贝:浅拷贝是创建一个新对象,其内容是原对象元素的引用;深拷贝则递归地复制对象及其包含的所有嵌套对象,生成一个完全独立的副本。可使用
copy
模块的copy()
函数进行浅拷贝,deepcopy()
函数进行深拷贝。
| import copy |
| |
| |
| original_list = [[1, 2], [3, 4]] |
| shallow_copied_list = copy.copy(original_list) |
| original_list[0][0] = 99 |
| print(shallow_copied_list) |
| |
| |
| original_list = [[1, 2], [3, 4]] |
| deep_copied_list = copy.deepcopy(original_list) |
| original_list[0][0] = 99 |
| print(deep_copied_list) |
- 元类编程进阶:元类不仅能创建类,还可用于实现一些高级特性,如自动注册类、修改类的属性和方法等。例如,使用元类实现类的自动注册,可在元类的
__init__
方法中添加注册逻辑。
| class MetaClass(type): |
| registered_classes = [] |
| def __init__(cls, name, bases, attrs): |
| super().__init__(name, bases, attrs) |
| MetaClass.registered_classes.append(cls) |
| |
| class MyClass(metaclass=MetaClass): |
| pass |
| |
| print(MetaClass.registered_classes) |
- 描述器的高级应用:描述器可用于实现数据验证、属性缓存等功能。比如,创建一个数据验证描述器,确保类属性的值在特定范围内。
| class RangeValidator: |
| def __init__(self, min_val, max_val): |
| self.min_val = min_val |
| self.max_val = max_val |
| |
| def __set__(self, instance, value): |
| if value < self.min_val or value > self.max_val: |
| raise ValueError(f"值必须在{self.min_val}到{self.max_val}之间") |
| instance.__dict__[self.name] = value |
| |
| def __set_name__(self, owner, name): |
| self.name = name |
| |
| class MyClass: |
| num = RangeValidator(0, 100) |
| |
| obj = MyClass() |
| obj.num = 50 |
| |
- 异步编程相关术语扩展:在异步编程中,除了常见的异步生成器、异步迭代器等,还有
asyncio
库中的事件循环(Event Loop),它是异步编程的核心,负责调度和执行异步任务;任务(Task)用于管理异步操作,可通过asyncio.create_task()
创建;await
只能在异步函数中使用,用于暂停协程执行,等待可等待对象完成,并返回其结果。
| import asyncio |
| |
| async def async_task(): |
| await asyncio.sleep(1) |
| return "任务完成" |
| |
| async def main(): |
| task = asyncio.create_task(async_task()) |
| result = await task |
| print(result) |
| |
| asyncio.run(main()) |
- 类型提示的进阶用法:除了基本的类型标注,还可使用联合类型(如
Union[int, str]
表示变量可以是int
或str
类型 )、可选类型(Optional[int]
等价于Union[int, None]
)、泛型类型(如List[int]
表示整数列表 )等进行更精确的类型提示,帮助静态类型检查器更好地发现代码中的类型错误。
| from typing import Union, Optional, List |
| |
| def my_function(value: Union[int, str]) -> Optional[str]: |
| if isinstance(value, int): |
| return str(value) |
| elif isinstance(value, str): |
| return value |
| return None |
| |
| def process_list(lst: List[int]) -> List[str]: |
| return [str(i) for i in lst] |
- Python 的内存管理机制补充:除了引用计数和垃圾回收,Python 还采用了分代回收策略,将对象分为不同的代,新创建的对象在年轻代,随着对象存活时间增加,可能会被移动到更老的代。垃圾回收器会更频繁地检查年轻代,因为年轻代中的对象通常生命周期较短,这样可以提高垃圾回收的效率。
- Python 中的魔法方法深入解析:除了常见的
__init__
、__str__
等魔法方法,还有__call__
方法,使得对象可以像函数一样被调用;__enter__
和__exit__
用于实现上下文管理器;__eq__
用于定义对象的相等比较逻辑等。合理使用这些魔法方法可以让代码更加简洁和易读。
| class CallableObject: |
| def __call__(self): |
| print("对象被调用了") |
| |
| obj = CallableObject() |
| obj() |
总结
掌握这些 Python 术语是深入学习和高效编程的关键。它们贯穿于 Python 编程的各个环节,从基础语法构建到复杂项目开发都起着重要作用。希望通过本文的介绍,你能对这些术语有更清晰的理解,在 Python 编程道路上更上一层楼。
TAG: Python、术语解释、编程基础、核心概念、类型提示
Python 官方文档**:https://docs.python.org/zh-cn/3.12/glossary.html,全面且权威,是学习 Python 的最佳资源之一。
Python专栏 https://blog.csdn.net/tekin_cn/category_12539454.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?