2026.7.14 11:38
学习路线
Python -> Python进阶 -> Python数据分析 -> LangChain -> 机器学习 -> 神经网络 -> NLP -> Coze -> Dify -> 大模型应用基础 -> 大模型微调 -> 多模态 -> vibeCoding
复习巩固总结(默写缺失) - 半小时
一、序列
1. 列表:[1,2,3] list
- 增 append insert (extend)
- 删 del pop clear (remove)
- 方法 max min sum index count len sorted reversed (sort reverse)
- 遍历 while forin enumerate
2. 元组:(1,2,3) tuple
- 方法 max min sum index count len sorted reversed
- 遍历 while forin
3. 字符串:'123' str
- 方法 split len count index replace (sorted max min strip)
- 遍历 while forin
二、集合字典
1. 集合 {1,2,3} set frozenset
- 增 add (update)
- 删 pop clear remove (discord)
- 方法 difference union difference_update (issubset issuperset isdisjoint)
- 运算 & | - ^
- 遍历 forin
2. 字典 {a:1,b:2} dict
- 删 clear (del pop)
- 改 update
- 查 get
- 方法 keys values (items len)
- 遍历 forin
三、类
1. 类方法 @classmethod
2. 静态方法 @staticmethond
3. 常用方法 isinstance issubclass
4. 三种权限 a _b __c
5. getter @property
6. setter @a.setter
7. 魔法方法 __init__ __len__ __str__ __lt__ __gt__ __eq__ __getattr__
8. 抽象类 @abstractmethod
2026.07.14 15:35
Python 学习
107. 重新认识函数
# 1. 函数也是对象
a1 = 100 # int类的实例对象
a2 = 'hello' # str类的实例对象
a3 = [10, 20, 30] # list类的实例对象
print(type(a1))
print(type(a2))
print(type(a3))
def welcome(): # function类的实例对象
print('你好啊')
# print(type(welcome()))
print(type(welcome))
# 2. 函数可以动态添加属性
def welcome():
print('你好啊')
welcome.desc = '这是一个打招呼的函数'
welcome.version = 1.0
print(welcome.desc)
print(welcome.version)
# 3. 函数可以赋值给变量
def welcome():
print('你好啊')
welcome.desc = '这是一个打招呼的函数'
welcome.version = 1.0
say_hello = welcome
say_hello()
print(say_hello.desc)
print(say_hello.version)
# 4. 可变参数 vs 不可变参数
# 不可变参数
a = 666
def welcome(data):
# print(data)
print('data修改前', data, id(data)) # 666 地址1
data = 888
# print(data)
print('data修改后', data, id(data)) # 888 地址2
print('函数调用前', a, id(a)) # 666 地址1
welcome(a)
# print(a)
print('函数调用后', a, id(a)) # 666 地址1
# 可变参数
a = [10, 20, 30]
def welcome(data):
# print(data)
print('data修改前', data, id(data)) # [10, 20, 30] 地址1
data[2] = 99
# print(data)
print('data修改后', data, id(data)) # [10, 20, 99] 地址1
print('函数调用前', a, id(a)) # [10, 20, 30] 地址1
welcome(a)
print(a)
print('函数调用后', a, id(a)) # [10, 20, 99] 地址1
# 5. 函数也可以作为参数
def welcome():
print('你好啊')
def caller(f):
print('caller函数调用了')
f()
caller(welcome)
# 6. 函数也可以作为返回值
def welcome():
print('你好啊')
def show_msg(msg):
print(msg)
return show_msg
# welcome()
result = welcome()
# print(result)
# result()
result('尚硅谷')
# show_msg('尚硅谷') # 报错
welcome()('尚硅谷')
108. 多返回值_参数的打包与解包
# 一、函数的多返回值
def calculate(x, y):
res1 = x + y
res2 = x - y
return res1, res2
# return (res1, res2)
# return [res1, res2]
result = calculate(30, 10)
print(result) # (40, 20) -> [40, 20]
r1, r2 = calculate(30, 10)
print(r1, r2) # 40 20
# 二、参数的打包与解包
# 1. 打包接收参数:
# *args : 打包所有的位置参数(会形成一个元组)
# **kwargs : 打包所有的关键字参数(会形成一个字典)
def show_info(*args, **kwargs):
# def show_info(*qwe, **asd):
print(args)
# print(qwe)
print(kwargs)
# print(asd)
show_info(10, 20, 30, name='张三', age=18, gender='男')
# 2. 解包传递参数
# *变量名 : 将元组拆解成一个一个独立的位置参数
# **变量名 : 将字典拆解成一个一个 key=value 形式的关键字参数
def show_info(num1, num2, num3, name, age, gender):
print(num1, num2, num3)
print(name, age, gender)
show_info(10, 20, 30, '张三', 18, '男')
nums = (10, 20, 30)
person = {'name': '张三', 'age': 18, 'gender': '男'}
show_info(nums[0], nums[1], nums[2], person['name'], person['age'], person['gender'])
show_info(*nums, **person)
# 3. 打包接收参数 和 解包传递参数 一起使用
def show_info(*args, **kwargs):
print(args)
print(kwargs)
nums = (10, 20, 30)
person = {'name': '张三', 'age': 18, 'gender': '男'}
show_info(*nums, **person)
109. 高阶函数
# 高阶函数: 当一个函数是【参数是函数】或者【返回值是函数】那该函数就是【高阶函数】
# 高阶函数的意义:
# 1. 代码复用性高: 可以吧行为“独立出去”,传入不同函数实现不同逻辑
# 2. 能让函数更灵活,更通用
# 3. 高阶函数是: 装饰器、闭包的基础(后面会讲)
def info(msg):
return '[提示]: ' + msg
def warn(msg):
return '[警告]: ' + msg
def error(msg):
return '[错误]: ' + msg
def log(func, text):
print(func(text))
log(info, '文件保存成功! ')
log(warn, '磁盘空间不足! ')
log(error, '该用户不存在! ')
110. 条件表达式
# 表达式: 执行后能得到值的代码,就是表达式(表达式最终会形成一个值,可以写在任何需要值的地方)
# 3 + 5
a1 = 3 + 5
a2 = 'abc' * 3
# a3 = 5 > 3
print(5 > 3)
# a4 = 'y' in 'python'
int('y' in 'python') # 1
a5 = len('hello')
# 条件表达式: 根据条件的真假,在两个值中二选一的表达式(又称: 三元表达式、三目运算符)
# age = 18
# age = 15
age = 21
text = 'xx'
# 传统的if-else去写:
if age >= 18:
text = '成年'
else:
text = '未成年'
print(text)
# 条件表达式去写: 值1 if 条件 else 值2
text = '成年' if age >= 18 else '未成年'
print(text)
# 条件表达式的使用场景: 简单的二选一场景
rain = True
eat = '外卖' if rain else '出去吃'
# is_vip = True
is_vip = False
discount = 0.8 if is_vip else 1.0
# is_login = True
is_login = False
msg = '欢迎回来! ' if is_login else '请先登录! '
# msg = '欢迎回来! ' if is_login else for item in range(10) # 错误写法
# msg = '欢迎回来! ' if is_login else for item in print('哈哈哈')
print(eat)
print(discount)
print(msg)
result = print(100)
print(result)
111. 匿名函数
# 概念: 所谓【匿名函数】,就是没有名字的函数,它无需使用 def 关键字去定义
# 语法: Python 中使用 lambda 关键字来定义【匿名函数】,格式为: lambda 参数: 表达式
# 使用场景: 当一个函数只能用一次、只做一点点小事,使用匿名函数会更简洁
# 使用普通函数实现计算效果
def add(x, y):
return x + y
def sub(x, y):
return x - y
def calculate(func, a, b):
print(f'计算结果为: {func(a, b)}')
calculate(add, 30, 10)
calculate(sub, 30, 10)
# 匿名函数
add = lambda x, y: x + y
# add = lambda x, y: return x + y # 语法报错
result = add(30, 10)
print(result)
add2 = lambda x: x + x
add3 = lambda: '我是add3函数'
result2 = add2(30)
result3 = add3()
print(result2, result3)
# 使用匿名函数实现计算效果
def calculate(func, a, b):
print(f'计算结果为: {func(a, b)}')
calculate(lambda x, y: x + y, 30, 10)
calculate(lambda x, y: x - y, 30, 10)
# 注意点
# 1. 只能写一行,不能写多行代码
# 2. 不能写代码块(if、for、while)
# 3. 冒号右边必须是表达式,且只能写一个表达式
# 4. 表达式结果自动作为返回值
# 语法错误
# is_adult = lambda age:
# if age >= 18:
# return '成年'
# else:
# return '未成年'
# 语法错误
# is_adult = lambda age: if age >= 18: return '成年' else: return '未成年'
# 运行报错
# is_adult = lambda age: if age >= 18: age + 1, age + 2
# is_adult(19)
is_adult = lambda age: '成年' if age >= 18 else '未成年'
print(is_adult(18))
print(is_adult(13))
112. 数据处理_map函数
# map函数: 对一组数据中的每一个元素,统一执行某种操作(加工),并生成一组新数据
# 语法格式: map(操作函数,可迭代对象)
# 统一数据处理
nums = [10, 20, 30, 40]
def double(x):
return x * 2
# map函数的返回值是一个迭代器对象,需要我们自己去手动遍历,或者手动类型转换
# map(double())
result = map(double, nums)
print(result) # <map object at 0x000001E5AFD37D90>
print(list(result)) # [20, 40, 60, 80]
for item in result:
print(item)
result = map(lambda x: x * 2, nums)
print(list(result)) # [20, 40, 60, 80]
print(nums) # [10, 20, 30, 40]
# 字符串转换
names = ('python', 'java', 'js')
str1 = 'hello'
result = str1.upper()
print(result)
result = map(lambda x: x.upper(), names)
# print(result)
print(tuple(result))
# print(list(result))
# print(set(result))
print(names)
# 类型转换
str_number = {'1', '2', '3'}
result = map(int, str_number)
print(set(result))
print(str_number)
# 注意点:
# 1. 延迟执行: map 不会立即计算,只有在“需要结果”才执行计算
# 2. 返回的是迭代器对象,且一旦遍历完成,就会被“耗尽”
# 3. map 不会影响元素数量
nums = [10, 20, 30, 40]
result = map(lambda x: x * 2, nums)
# print(result) # 此时未执行计算
# print(list(result)) # 此时执行计算 [20, 40, 60, 80]
# print(list(result)) # []
nums2 = list(result)
print(nums2)
print(nums2)
print(nums2)
print(nums2)
result = list(map(lambda x: x * 2, nums))
print(result)
print(result)
print(result)
print(result)
113. 数据处理_filter函数
# filter函数: 从一组数据中,筛选出符合条件的元素(过滤),并组成一组新数据
# 语法格式: filter(过滤函数, 可迭代对象)
# 筛选数值
nums = [10, 20, 30, 40, 50]
result = filter(lambda n: n > 30, nums)
print(result) # <filter object at 0x000001F5259A6410>
print(list(result)) # [40, 50]
result = filter(lambda n: False, nums)
print(list(result)) # []
result = filter(lambda n: True, nums)
print(list(result)) # [10, 20, 30, 40, 50]
print(nums) # [10, 20, 30, 40, 50]
# 筛选成年人
persons = [
{'name': '张三', 'age': 15, 'gender': '男'},
{'name': '李四', 'age': 16, 'gender': '女'},
{'name': '王五', 'age': 17, 'gender': '男'},
{'name': '李华', 'age': 18, 'gender': '女'},
{'name': '赵六', 'age': 19, 'gender': '女'},
{'name': '孙七', 'age': 20, 'gender': '男'},
]
# result = filter(lambda p: p >= 18, persons)
result = filter(lambda p: p['age'] >= 18, persons)
print(list(result))
# 过滤一下非法字符串
names = ['张三', '', '李四', None, '王五']
# result = filter(lambda n: n != '', names)
result = filter(lambda n: n, names)
# result = filter(lambda n: True, names)
print(list(result))
# print(list(result)) # []
# 注意点
# 1. 延迟执行: filter 不会立刻筛选,只有在“需要结果”才执行计算
# 2. 返回的是迭代器对象,且一旦遍历完成,就会被“耗尽”
# 3. filter可能会影响元素数量
# filter函数的特殊用法: 如果不传递过滤函数,那么会自动过滤掉“假值”
data = [0, 1, '', 'hello', [], (), 5]
# result = filter(data)
result = filter(None, data)
print(list(result)) # [1, 'hello', 5]
114. 数据处理_sorted函数
# sorted函数: 对一组数据进行排序,返回一组新数据
# 语法格式: sorted(可迭代对象, key=xxx, reverse=xxx)
# 数字排序
nums = [30, 40, 20, 10]
result = sorted(nums)
print(result) # [10, 20, 30, 40]
result = sorted(nums, reverse=True)
print(result) # [40, 30, 20, 10]
# 按照字符串的长度去排序
names = ['python', 'sql', 'java']
result = sorted(names)
print(result) # Unicode编码排序 ['java', 'python', 'sql']
print(ord('j')) # 106
print(ord('p')) # 112
print(ord('s')) # 115
result = sorted(names, key=lambda n: len(n))
print(result) # ['sql', 'java', 'python']
result = sorted(names, key=lambda n: len(n), reverse=True)
print(result) # ['python', 'java', 'sql']
result = sorted(names, key=len, reverse=True)
print(result) # ['python', 'java', 'sql']
result = sorted(names, key=len)
print(result) # ['sql', 'java', 'python']
# 根据字典中的某个字段进行排序
persons = [
{'name': '张三', 'age': 15, 'gender': '男'},
{'name': '李四', 'age': 17, 'gender': '女'},
{'name': '王五', 'age': 19, 'gender': '男'},
{'name': '李华', 'age': 20, 'gender': '女'},
{'name': '赵六', 'age': 18, 'gender': '女'},
{'name': '孙七', 'age': 16, 'gender': '男'},
]
# result = sorted(persons) # 报错
# result = sorted(persons['age']) # 报错
result = sorted(persons, key=lambda p: p['age'])
print(result)
result = sorted(persons, key=lambda p: p['age'], reverse=True)
print(result)
# 我们之前讲的max函数、min函数,也可以传递key参数,用于设置筛选依据
nums = [10, 20, 30, 40, 50]
result1 = max(nums)
result2 = min(nums)
print(result1)
print(result2)
# result1 = max(persons) # 报错
result1 = max(persons, key=lambda p: p['age'])
print(result1)
result2 = min(persons, key=lambda p: p['age'])
print(result2)
115. 数据处理_reduce函数
# reduce 函数: 将一组数据不断“合并”,最终归并成一个结果
# 语法格式: reduce(合并函数, 可迭代对象, 初始值)
# 备注: reduce 函数需要从 functools 模块中引入才能使用
# 从 functools 模块中引入 reduce
from functools import reduce
# 数据统计
nums = [1, 2, 3, 4, 5]
def count(a, b):
# def count(a, b, c):
print('count函数调用了', a, b)
return a + b
# return a + b + c
result = reduce(count, nums)
print(result) # 15
result = reduce(count, nums, 10)
print(result) # 25
result = reduce(lambda a, b: a + b, nums, 10)
print(result) # 25
result = reduce(lambda a, b: a * b, nums, 10)
print(result) # 1200
# 字符串拼接
str_list = ['ab', 'cd', 'ef']
result = reduce(lambda a, b: a + b, str_list)
print(result) # 'abcdef'
2026.07.14 21:43
116. 列表推导式
# 列表推导式: 用一条简洁语句,从可迭代对象中,生成新列表的语法结构
# 备注: 列表推导式本质上是对 for循环 + append() 的一种简写形式
# 语法格式: [表达式 for 变量 in 可迭代对象]
# 需求: 让列表中每个元素,都变为原来的2倍,得到是一个新的列表
# 方式一: 用map函数
nums = [10, 20, 30, 40]
result = list(map(lambda n: n * 2, nums))
print(result)
# 方式二: 用 for循环 + append()
nums = [10, 20, 30, 40]
result = []
for n in nums:
result.append(n * 2)
print(result)
# 方式三: 用列表推导式
nums = [10, 20, 30, 40]
result = [n * 2 for n in nums]
print(result)
# 带条件的列表推导式
nums = [10, 20, 30, 40]
result = [n * 2 for n in nums if n > 20]
print(result)
# 字典推导式
names = ['张三', '李四', '王五']
scores = [60, 70, 80]
# result = {n for n in names}
# result = {n: 90 for n in names}
# result = {n: 90 for n in len(names)}
result = {names[i]: scores[i] for i in range(len(names))}
print(result)
# 集合推导式
names = ['张三', '李四', '王五']
result = {n + '! ' for n in names}
print(result)
names = ['张三', '李四', '王五']
# Python中没有元组推导式,下面这种写法叫: 生成器(后面会仔细讲)
result = (n + '! ' for n in names)
print(result)