Python 特性(第一部分):知识点讲解(含示例)

📅 发布时间:2026/7/14 16:58:05 👁️ 浏览次数:
Python 特性(第一部分):知识点讲解(含示例)
目录一、集合Set与字典Dictionary1. 集合Set2. 字典Dictionary二、函数Function1. 普通函数def 定义2. 匿名函数lambda 定义三、模块和包Module Package1. 模块Module2. 包Package四、异常Exception五、文件File六、类Class与面向对象OOP七、生成器Generator1. 生成器函数def yield2. 生成器表达式类似列表推导式用 () 代替 []3. 应用场景处理大数据如读取大文件八、装饰器Decorator1. 基础装饰器无参数2. 带参数的装饰器3. 类装饰器一、集合Set与字典Dictionary1. 集合Set定义无序、不重复的元素集合支持数学中的集合运算交集、并集等底层基于哈希表实现。核心特点去重、无序、元素必须是不可变类型如数字、字符串、元组不支持索引访问。常用操作与示例# 1. 集合创建s1 {1, 2, 3, 4} # 直接用大括号注意空集合不能用{}需用set()s2 set([2, 3, 5, 6]) # 从列表转换s3 set(hello) # 从字符串转换自动去重print(s3) # 输出{h, e, l, o}去重了重复的l# 2. 核心操作# 去重最常用场景lst [1, 2, 2, 3, 3, 3]unique_lst list(set(lst))print(unique_lst) # 输出[1, 2, 3]无序# 集合运算print(s1 s2) # 交集{2, 3}print(s1 | s2) # 并集{1, 2, 3, 4, 5, 6}print(s1 - s2) # 差集{1, 4}s1中有而s2中没有print(s1 ^ s2) # 对称差集{1, 4, 5, 6}两边独有的元素# 增删元素s1.add(5) # 添加单个元素s1.update([6, 7]) # 添加多个元素s1.remove(7) # 删除元素元素不存在会报错s1.discard(8) # 删除元素元素不存在不报错2. 字典Dictionary定义无序的键值对key-value集合key 唯一且必须是不可变类型value 可任意类型Python 3.7 后字典有序。核心特点查询速度快O (1)、key 不可重复、支持动态增删改查。常用操作与示例# 1. 字典创建dict1 {name: 张三, age: 25, gender: 男}dict2 dict(name李四, age30) # 用dict()函数dict3 {k: v for k, v in [(a, 1), (b, 2)]} # 字典推导式print(dict3) # 输出{a: 1, b: 2}# 2. 核心操作# 访问值两种方式print(dict1[name]) # 输出张三key不存在会报错print(dict1.get(age, 0)) # 输出25key不存在返回默认值0# 增删改dict1[address] 北京 # 添加新键值对dict1[age] 26 # 修改已有key的值del dict1[gender] # 删除键值对dict1.pop(address) # 弹出并返回指定key的值# 遍历字典for key in dict1:print(key, dict1[key]) # 遍历key通过key获取valuefor key, value in dict1.items():print(key, value) # 直接遍历键值对推荐# 字典推导式过滤/转换new_dict {k: v*2 for k, v in {a:1, b:2, c:3}.items() if v 1}print(new_dict) # 输出{b: 4, c: 6}二、函数Function定义封装特定功能的代码块可重复调用提高代码复用性和可读性。核心特点支持参数传递、返回值、默认参数、关键字参数、匿名函数等。分类与示例1. 普通函数def 定义# 1. 无参数无返回值def say_hello():print(Hello Python!)say_hello() # 调用函数输出Hello Python!# 2. 带参数和返回值def add(a, b):return a b # 返回计算结果result add(3, 5)print(result) # 输出8# 3. 默认参数默认参数需放在位置参数后def power(x, n2):return x **n # 计算x的n次方默认平方print(power(3)) # 输出9使用默认参数n2print(power(3, 3)) # 输出27自定义n3# 4. 关键字参数调用时指定参数名顺序可任意def person(name, age):print(f姓名{name}年龄{age})person(age25, name张三) # 关键字参数调用输出姓名张三年龄25# 5. 可变参数*args接收任意个位置参数返回元组def sum_args(*args):total 0for num in args:total numreturn totalprint(sum_args(1, 2, 3, 4)) # 输出10接收4个参数# 6. 关键字可变参数**kwargs接收任意个关键字参数返回字典def print_info(**kwargs):for k, v in kwargs.items():print(f{k}: {v})print_info(name李四, age30, address上海) # 输出多个关键字参数2. 匿名函数lambda 定义简洁的单行函数仅能包含一个表达式适合简单逻辑。# 语法lambda 参数: 表达式add_lambda lambda x, y: x yprint(add_lambda(2, 3)) # 输出5# 常用场景作为sorted、map等函数的参数lst [(1, 3), (2, 1), (4, 2)]# 按元组第二个元素排序sorted_lst sorted(lst, keylambda x: x[1])print(sorted_lst) # 输出[(2, 1), (4, 2), (1, 3)]三、模块和包Module Package1. 模块Module定义一个.py文件就是一个模块包含函数、类、变量等用于组织代码结构。核心作用避免命名冲突、代码复用。使用示例# 假设有一个模块文件my_module.py# my_module.py 内容# def add(a, b):# return a b# PI 3.14159# 1. 导入整个模块import my_moduleprint(my_module.add(2, 3)) # 输出5print(my_module.PI) # 输出3.14159# 2. 导入模块中的特定内容推荐减少内存占用from my_module import add, PIprint(add(4, 5)) # 输出9print(PI) # 输出3.14159# 3. 导入时重命名避免冲突from my_module import add as my_addprint(my_add(5, 6)) # 输出11# 4. 导入模块中所有内容不推荐可能导致命名冲突from my_module import *2. 包Package定义包含__init__.py文件的文件夹用于组织多个相关模块Python 3.3 后__init__.py可省略但建议保留。目录结构示例mypackage/__init__.pymodule1.py # 包含函数func1()module2.py # 包含类Class2使用示例# 1. 导入包中的模块from mypackage import module1module1.func1() # 调用模块1中的函数# 2. 直接导入包中模块的内容from mypackage.module2 import Class2obj Class2() # 实例化类# 3. 在__init__.py中简化导入推荐# mypackage/__init__.py 内容# from .module1 import func1# from .module2 import Class2# 简化后直接从包导入from mypackage import func1, Class2func1()obj Class2()四、异常Exception定义程序运行时发生的错误如语法错误、逻辑错误若不处理会导致程序崩溃通过异常处理可让程序优雅容错。核心关键字try监控可能出错的代码、except捕获异常、else无异常时执行、finally无论是否异常都执行、raise主动抛出异常。处理示例# 1. 基础异常处理try:# 可能出错的代码如除以0result 10 / 0except ZeroDivisionError as e:# 捕获特定异常除以0异常print(f错误原因{e}) # 输出错误原因division by zeroexcept Exception as e:# 捕获所有其他异常兜底print(f未知错误{e})else:# 无异常时执行print(f计算结果{result})finally:# 无论是否异常都执行常用于资源清理print(程序执行完毕)# 2. 主动抛出异常raisedef check_age(age):if age age 150:# 主动抛出 ValueError 异常raise ValueError(年龄必须在0-150之间)return agetry:check_age(200)except ValueError as e:print(e) # 输出年龄必须在0-150之间# 3. 自定义异常类继承Exceptionclass MyException(Exception):def __init__(self, message):self.message messagetry:raise MyException(自定义异常触发)except MyException as e:print(e.message) # 输出自定义异常触发五、文件File定义Python 支持对文件的读写操作通过内置函数open()打开文件返回文件对象。核心模式r只读默认、w只写覆盖原有内容、a追加在文件末尾添加、r读写、b二进制模式如读写图片、视频。操作示例# 1. 读取文件推荐用with语句自动关闭文件避免资源泄露# 方式1读取全部内容with open(test.txt, r, encodingutf-8) as f:content f.read() # 读取所有内容print(content)# 方式2逐行读取适合大文件节省内存with open(test.txt, r, encodingutf-8) as f:for line in f:print(line.strip()) # strip()去除换行符# 2. 写入文件# w模式覆盖原有内容文件不存在则创建with open(test.txt, w, encodingutf-8) as f:f.write(Hello File!\n) # 写入字符串f.writelines([第一行\n, 第二行\n]) # 写入列表# a模式追加内容with open(test.txt, a, encodingutf-8) as f:f.write(追加的内容\n)# 3. 二进制文件操作如读写图片# 读取图片with open(image.jpg, rb) as f:img_data f.read()# 写入图片复制图片with open(image_copy.jpg, wb) as f:f.write(img_data)六、类Class与面向对象OOP定义类是对象的模板包含属性变量和方法函数面向对象编程的核心是封装、继承、多态。核心特性封装隐藏内部实现、继承复用父类代码、多态同一方法不同实现。示例# 1. 定义类与实例化class Person:# 类属性所有实例共享species 人类# 初始化方法创建实例时自动调用def __init__(self, name, age):# 实例属性每个实例独有self.name nameself.age age# 实例方法必须传self参数指代当前实例def introduce(self):print(f我叫{self.name}今年{self.age}岁)# 实例化类创建对象p1 Person(张三, 25)p1.introduce() # 调用实例方法输出我叫张三今年25岁print(p1.species) # 访问类属性输出人类# 2. 继承子类继承父类的属性和方法class Student(Person):# 子类初始化调用父类初始化方法def __init__(self, name, age, student_id):super().__init__(name, age) # 调用父类__init__self.student_id student_id # 子类新增属性# 重写父类方法多态def introduce(self):print(f我叫{self.name}学号{self.student_id}今年{self.age}岁)# 子类新增方法def study(self):print(f{self.name}正在学习)# 实例化子类s1 Student(李四, 20, 2024001)s1.introduce() # 调用重写后的方法输出我叫李四学号2024001今年20岁s1.study() # 调用子类新增方法输出李四正在学习# 3. 多态不同子类对同一方法的不同实现class Teacher(Person):def introduce(self):print(f我是{self.name}老师教龄{self.age-22}年)# 统一调用接口不同实例表现不同行为def print_intro(person):person.introduce()print_intro(Student(王五, 19, 2024002)) # 输出子类Student的实现print_intro(Teacher(赵六, 35)) # 输出子类Teacher的实现七、生成器Generator定义一种特殊的迭代器通过yield关键字返回数据每次调用next()或迭代时生成一个值不一次性加载所有数据节省内存。核心特点惰性计算按需生成数据、内存高效、可迭代支持for循环。创建方式与示例1. 生成器函数def yield# 生成器函数生成1~n的奇数def odd_generator(n):for i in range(1, n1):if i % 2 1:yield i # 暂停执行返回当前值下次调用从这里继续# 使用生成器通过for循环迭代自动调用next()for num in odd_generator(10):print(num, end ) # 输出1 3 5 7 9# 手动调用next()gen odd_generator(5)print(next(gen)) # 输出1print(next(gen)) # 输出3print(next(gen)) # 输出5print(next(gen)) # 抛出StopIteration异常无更多数据2. 生成器表达式类似列表推导式用 () 代替 []# 生成器表达式生成1~10的平方square_gen (x*x for x in range(1, 11))# 迭代生成器for num in square_gen:print(num, end ) # 输出1 4 9 16 25 36 49 64 81 100# 对比列表推导式生成器更省内存square_lst [x*x for x in range(1, 11)] # 一次性生成所有数据占内存3. 应用场景处理大数据如读取大文件# 生成器读取大文件逐行生成不加载整个文件到内存def read_large_file(file_path):with open(file_path, r, encodingutf-8) as f:for line in f:yield line.strip()# 迭代读取大文件for line in read_large_file(large_file.txt):# 处理每一行数据如解析、过滤print(line)八、装饰器Decorator定义一种高阶函数用于包装其他函数在不修改原函数代码的前提下为函数添加额外功能如日志、计时、权限验证。核心特点无侵入式扩展、代码复用、支持嵌套。分类与示例1. 基础装饰器无参数# 定义装饰器记录函数执行时间import timedef timer_decorator(func):# 包装函数*args接收位置参数**kwargs接收关键字参数def wrapper(*args, **kwargs):start_time time.time() # 执行前记录时间result func(*args, **kwargs) # 调用原函数end_time time.time() # 执行后记录时间print(f函数{func.__name__}执行时间{end_time - start_time:.4f}秒)return result # 返回原函数结果return wrapper# 使用装饰器语法糖timer_decoratordef add(a, b):time.sleep(1) # 模拟耗时操作return a b# 调用被装饰的函数result add(3, 5)print(f计算结果{result})# 输出# 函数add执行时间1.0005秒# 计算结果82. 带参数的装饰器# 定义带参数的装饰器记录日志到指定文件def log_decorator(log_fileapp.log):def decorator(func):def wrapper(*args, **kwargs):# 记录日志内容函数名、参数、执行时间log_content f函数{func.__name__} - 参数{args}, {kwargs} - 时间{time.strftime(%Y-%m-%d %H:%M:%S)}\n# 写入日志文件with open(log_file, a, encodingutf-8) as f:f.write(log_content)return func(*args, **kwargs)return wrapperreturn decorator# 使用带参数的装饰器指定日志文件log_decorator(log_filecalc.log)def multiply(a, b):return a * b# 调用函数自动记录日志print(multiply(4, 6)) # 输出24同时在calc.log中添加日志3. 类装饰器# 定义类装饰器计数函数调用次数class CountDecorator:def __init__(self, func):self.func funcself.count 0 # 记录调用次数def __call__(self, *args, **kwargs):self.count 1print(f函数{self.func.__name__}已调用{self.count}次)return self.func(*args, **kwargs)# 使用类装饰器CountDecoratordef say_hello(name):print(fHello {name}!)say_hello(张三) # 输出函数say_hello已调用1次 → Hello 张三!say_hello(李四) # 输出函数say_hello已调用2次 → Hello 李四!Python 这 8 大核心特性各有核心价值从数据存储、代码复用、错误处理到高级编程特性形成了完整的编程能力体系适配从基础开发到高级工程化的各类场景以下是核心总结集合与字典均基于哈希表实现集合是无序不重复的元素集主打去重和集合运算字典是键值对存储结构3.7 有序key 唯一且不可变查询速度快支持动态增删改和推导式是 Python 核心数据结构。函数封装可复用的功能代码块支持参数灵活传递默认、关键字、可变参数 * args/**kwargs还有 lambda 匿名单行函数可作为参数传递大幅提升代码复用性和简洁性。模块和包模块是单个.py 文件包是含__init__.py 的模块文件夹用于组织代码结构实现代码分层、复用和命名隔离支持多种导入方式是 Python 工程化开发的基础。异常处理程序运行时错误的机制通过 try/except/else/finally 捕获处理支持 raise 主动抛异常和自定义异常类让程序脱离崩溃式执行实现优雅容错和错误溯源。文件通过 open () 实现文件读写支持多种操作模式r/w/a/b 等推荐with 语句自动管理文件句柄避免资源泄露可处理文本和二进制文件满足数据持久化需求。类面向对象编程的核心是对象的模板包含属性和方法支持封装、继承、多态三大特性类属性共享、实例属性独有子类可重写父类方法实现代码的高扩展性和抽象化。生成器特殊的迭代器通过 yield 关键字或 () 表达式创建采用惰性计算按需生成数据而非一次性加载内存占用极低适合处理大数据集和无限序列支持迭代遍历。装饰器基于高阶函数的语法糖可在不修改原函数代码的前提下为函数添加额外功能计时、日志、权限校验等支持无参、带参和类装饰器实现功能的无侵入式扩展提升代码复用性。整体而言这些特性相互配合既保证了 Python 代码的简洁性和易读性又支撑了工程化、高性能、高扩展性的开发需求也是 Python 适配 Web 开发、数据分析、自动化等多领域的重要基础。