1.数据类型
基本类型
int 整形
-
定义
-
特点:
-
Python 3中int类型可以表示任意大小的整数
-
支持十进制、二进制(0b开头)、八进制(0o开头)、十六进制(0x开头)
-
-
示例:
a = 10 # 十进制
b = 0b1010 # 二进制,值为10
c = 0o12 # 八进制,值为10
d = 0xA # 十六进制,值为10
e = -5 # 负整数
float 浮点型
-
定义:浮点数,用于表示带小数点的数字
-
特点:
-
支持科学计数法表示(如1.23e-4)
-
精度有限,可能存在浮点数精度问题
-
-
示例:
a = 3.14
b = -2.5
c = 1.23e-4 # 科学计数法,等于0.000123
d = float(3) # 将整数转换为浮点数
bool 布尔型
-
定义:逻辑值,只有True和False两个值
-
特点:
-
实际上是int的子类,True对应1,False对应0
-
常用于条件判断和逻辑运算
-
-
示例:
a = True
b = False
c = 5 > 3 # 结果为True
d = bool(0) # 结果为False
e = bool(1) # 结果为True
complex 复数类型
-
定义:复数,由实部和虚部组成
-
特点:
-
虚部用j或J表示
-
支持复数运算
-
-
示例:
a = 3 + 4j # 实部3,虚部4
b = complex(2, 5) # 创建复数2+5j
c = a.real # 获取实部,值为3.0
d = a.imag # 获取虚部,值为4.0
复合类型
str 字符串
-
定义:由字符组成的序列,用于表示文本
-
特点:
-
可以使用单引号、双引号或三引号定义
-
字符串是不可变对象
-
支持索引、切片和多种字符串方法
-
-
示例:
s1 = 'Hello'
s2 = "World"
s3 = '''多行
字符串'''
# 字符串操作
s4 = s1 + ' ' + s2 # 字符串拼接
s5 = s1 * 3 # 字符串重复
s6 = s1[0] # 索引,获取'H'
s7 = s1[1:4] # 切片,获取'ell'
注意:三引号根据是否赋值来确定是注释还是字符串
-
三引号
'''xxx'''或"""xxx"""是注释 -
而
s1='''xxx'''或s1="""xxx"""是赋值字符串
list 列表
-
定义:有序的可变序列,用方括号[]表示
-
特点:
-
可以包含不同类型的元素
-
支持增删改查操作
-
-
示例:
lst = [1, 2, 3, 'hello', True]
lst.append(4) # 添加元素
lst[0] = 10 # 修改元素
del lst[1] # 删除元素
tuple 元组
-
定义:有序的不可变序列,用圆括号()表示
-
特点:
-
创建后不能修改
-
常用于存储不可变数据
-
-
示例:
tup = (1, 2, 3, 'hello')
tup2 = 1, 2, 3 # 可以省略括号
dict 字典
-
定义:键值对集合,用花括号{}表示
-
特点:
-
键必须是不可变类型(字符串、数字、元组)
-
值可以是任意类型
-
-
示例:
d = {'name': 'Alice', 'age': 25, 'city': 'Beijing'}
d['age'] = 26 # 修改值
d['gender'] = 'F' # 添加新键值对
set 集合
-
定义:无序的不重复元素集合
-
特点:
-
自动去重
-
支持集合运算(并集、交集、差集)
-
-
示例:
s = {1, 2, 3, 3, 2} # 实际为{1, 2, 3}
s.add(4) # 添加元素
s.remove(2) # 删除元素
类型转换
Python提供了内置函数进行类型转换:
int(x) # 转换为整数
float(x) # 转换为浮点数
str(x) # 转换为字符串
bool(x) # 转换为布尔值
list(x) # 转换为列表
tuple(x) # 转换为元组
dict(x) # 转换为字典
set(x) # 转换为集合
类型检查
使用type()函数检查变量类型:
type(10) # <class 'int'>
type(3.14) # <class 'float'>
type('hello') # <class 'str'>
type(True) # <class 'bool'>
2.格式化输出
print()[老字符串方法]
name = "张三"
age = 18
print("我叫",name,"今年",sex, sep="")
str.format()[新字符串方法]
name = "张三"
age = 18
print("我的姓名:{},我的年龄:{}".format(name,age))
name2 = "李四"
age2 = 20
print("我的姓名:{name},我的年龄:{age}".format(name=name2,age=age2))
f-strings[Python 3.6+]
f-strings是Python3.6版本中引入的一种新的字符串格式方法。它们提供了一种简洁,直观且性能优异的方式来嵌入变量和表达式的值到字符串中,该方法简单易读。
基本使用
f-strings通过在字符串前加上f或F来标识,并允许在字符串中直接嵌入表达式。表达式被大括号{}包围,其计算结果将被转换为字符串并插入到相应的为止。
示例:
name = "张三"
age = 18
sex = "女"
print(f"我的名字:{name},我的年龄:{age},我的性别:{sex}")
print(F"我的名字:{name},我的年龄:{age},我的性别:{sex}")
”’
输出结果:
我的名字:张三,我的年龄:18,我的性别:女
我的名字:张三,我的年龄:18,我的性别:女
”’
表达式支持
n1 = 3
n2 = 4
# 输出 3*4=12
print(f"{n1}*{n2}={n1*n2}")
设置整数位数
对于整数,可以设置其显示的最小宽度,并使用零或空格填充字符已达到该宽度。使用零为填充字符时,整数前面会填充零,而使用空格填充字符时,整数前面会填充空格。
示例:
sid = 1
print(f"我的学号是:{sid:03d}")
print(f"他的学号是:002")
# 输出结果
'''
我的学号是:001
他的学号是:002
'''
设置浮点数位数
对于浮点数,可以设置其显示的小数位数。使用
:.n格式,其中n为小数位数。
示例:
pi = 3.141592653589793
print(f"PI保留两位小数:{pi:.2f}")
# 输出结果
'''
PI保留两位小数:3.14
'''
3.运算符
算术运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
+ |
加法 | a + b |
- |
减法 | a - b |
* |
乘法 | a * b |
/ |
除法 | a / b |
// |
整除 | a // b |
% |
取余 | a % b |
** |
指数(幂):** |
a ** b |
-
除法(
/)返回浮点数结果,而整除(//)返回整数结果。 -
取余(
%)返回两个操作数相除的余数。
运算符优先级
-
先计算指数(
**) -
再计算乘法(
*、/、//、%) -
最后计算加法(
+、-)
运算符优先级排序为:** > *、/、//、% > +、-
# 优先级测试
print(10 - 8 / (3+1) * 6 // 2 + 15 % 2 ** 3)
# 输出结果:11.0
注意:除法和整除除数不能为0
注意://返回的结果是向下取整的结果
示例:
a = 10
b = 3
print(a + b) # 13
print(a - b) # 7
print(a * b) # 30
print(a / b) # 3.3333333333333335
print(a % b) # 1
print(a ** b) # 1000000000000000000
n = 2
m = 3
print(n ** m) # 8
print(m ** n) # 9
赋值运算符
在Python中,赋值运算符主要用于给变量赋值。在使用时,将右侧的值赋给左侧的变量,右侧也可以在进行某些运算后再赋值。
| 运算符 | 描述 | 实例 |
|---|---|---|
= |
赋值 | a = b |
+= |
加法赋值 | a += b 等效于 a = a + b |
-= |
减法赋值 | a -= b 等效于 a = a - b |
*= |
乘法赋值 | a *= b 等效于 a = a * b |
/= |
除法赋值 | a /= b 等效于 a = a / b |
//= |
整除赋值 | a //= b 等效于 a = a // b |
%= |
取余赋值 | a %= b 等效于 a = a % b |
**= |
指数赋值 | a **= b 等效于 a = a ** b |
关系运算符
逻辑运算符
逻辑运算符用于对布尔值进行逻辑运算,返回结果为布尔值。 通常用于判断多个条件是否同时满足。
a = True
b = False
print(a and b) # False
print(a or b) # True
print(not a) # False
逻辑运算符的优先级为:
not>and>or
| 运算符 | 描述 | 示例 |
|---|---|---|
and |
与 | a and b |
or |
或 | a or b |
not |
非 | not a |
位运算符
输入函数 input()
input(__prompt=None)
# 参数:
# __prompt:提示信息,默认值为None,可忽略。当用户输入内容后,会将输入的内容作为字符串返回。__prompt=None时,不显示提示信息。
示例:
name = input("请输入姓名:")
print("你好,",name)
print(name, type(name))
”’
请输入姓名:123123
你好, 123123
123123 <class ‘str’>
”’
转义字符
转义字符用于在字符串中表示一些特殊字符,如换行、制表符、引号等。
| 转义字符 | 描述 |
|---|---|
\n |
换行 |
\t |
制表符 |
' |
单引号 |
" |
双引号 |
\\ |
反斜杠 |
\b |
退格 |
\f |
换页 |
\r |
回车 |
\uXXXX |
Unicode字符 |
\UXXXXXXXX |
Unicode字符 |
3.流程控制
if语句
简单的if语句
if 表达式:
语块
当表达式为True时,执行语块中的代码。 当表达式为False时,不执行语块中的代码。
age = 30
if age >= 18:
print("成年人")
else:
print("未成年人")
”’
输出结果:
成年人
”’
多分支if语句
if 表达式1:
语块1
elif 表达式2:
语块2
else:
语块3
当表达式1为True时,执行语块1中的代码。 当表达式2为True时,执行语块2中的代码。 当表达式1和表达式2都为False时,执行语块3中的代码。
wendu = 30
if wendu >= 30:
print("天气热")
elif wendu >= 20:
print("天气刚好")
elif wendu >= 10:
print("天气微凉")
else:
print("天气冷")
'''
输出结果:天气热
'''
三元表达式
三元表达式是一种简洁的if语句,用于根据条件判断执行不同的表达式。 语法:
表达式1 if 条件 else 表达式2当条件为True时,执行表达式1;当条件为False时,执行表达式2。
is_raining = False
if is_raining:
print("下雨了")
else:
print("没有下雨")
'''
输出结果:没有下雨
'''
print(“下雨了”) if is_raining else “没有下雨”
”’
输出结果:没有下雨
”’
# 另一种写法
a = 10
b = a > 10 and a or 5
print(b)
”’
输出结果:10
”’
if嵌套
if语句可以嵌套使用,用于判断多个条件是否同时满足。 当一个条件为True时,再判断另一个条件是否为True。 当一个条件为False时,不执行嵌套的if语句。
# 需求:检查学生的成绩和出勤率以决定其是否获得奖学金
# 定义一个变量保存学生的成绩
score = 90
# 定义一个变量保存学生的出勤率
attendance = 0.9
# 使用if嵌套方式实现:
if score >= 80:
if attendance >= 0.85:
print(“获得奖学金”)
else:
print(“未获得奖学金”)
else:
print(“未获得奖学金”)
# 使用逻辑运算符直接判断:
if score >= 95 and attendance >= 0.9:
print(“获得奖学金”)
else:
print(“未获得奖学金”)
”’
输出结果:
获得奖学金
未获得奖学金
”’
4.正则表达式
正则表达式(Regular Expression)是一种用来匹配字符串的强大工具,Python通过内置的re模块提供支持。
含义
正则表达式是一种用于描述文本模式的代码,它定义了一系列规则来匹配字符串中的特定模式。这些模式可以非常灵活和复杂,能够用于识别和处理各种文本数据。
它是强大的字符串处理工具。在软件开发中,我们经常需要查找、验证或提取符合特定规则的字符串。例如,在网页爬虫或数据抓取任务中,我们可能需要从大量文本中提取出所有有效的邮箱地址或电话号码。这时,正则表达式就派上了大用场,它允许我们以一种高效且准确的方式来完成这些任务。
Python自1.5版本开始内置了 re 模块,该模块提供了完整的正则表达式功能。要使用正则表达式,首先需要导入Python的 re 模块。通过 re 模块提供的一系列函数,我们可以轻松地在Python程序中进行正则表达式的匹配、搜索、替换等操作。
re模块导入
import re
核心函数
| 函数 | 描述 | 返回值 |
|---|---|---|
re.search(pattern, string) |
在整个字符串中搜索第一个匹配 | Match对象 或 None |
re.match(pattern, string) |
从字符串开头匹配 | Match对象 或 None |
re.findall(pattern, string) |
返回所有匹配的列表 | list |
re.finditer(pattern, string) |
返回所有匹配的迭代器 | iterator |
re.sub(pattern, repl, string) |
替换所有匹配项,返回新字符串 | str |
re.split(pattern, string) |
按模式分割字符串,返回列表 | list |
re.compile(pattern) |
编译正则表达式,提高复用效率 | Pattern对象 |
基本示例
import re
text = “我的手机号是13812345678,座机是010-88886666”
# search:找到第一个匹配
result = re.search(r”\d{11}”, text)
print(result.group()) # 13812345678
# findall:找到所有匹配
phones = re.findall(r”\d[\d-]+”, text)
print(phones) # [‘13812345678’, ‘010-88886666’]
# sub:替换
masked = re.sub(r”\d{3}\d{4}\d{4}”, “***”, text)
print(masked) # 我的手机号是***,座机是010-88886666
# split:分割
s = “a,b;c|d e”
parts = re.split(r”[,;| ]”, s)
print(parts) # [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
Match对象
re.search()和re.match()返回Match对象,常用方法:
| 方法 | 描述 |
|---|---|
group() / group(0) |
返回整个匹配的字符串 |
group(n) |
返回第n个捕获组 |
groups() |
返回所有捕获组的元组 |
start() |
匹配的起始位置 |
end() |
匹配的结束位置 |
span() |
返回 (start, end) 元组 |
m = re.search(r"(\d{3})-(\d{8})", "电话:010-88886666")
print(m.group()) # 010-88886666
print(m.group(1)) # 010
print(m.group(2)) # 88886666
print(m.groups()) # ('010', '88886666')
print(m.span()) # (3, 15)
常用元字符
字符匹配
| 符号 | 含义 | 示例 |
|---|---|---|
. |
匹配任意字符(除换行符) | a.b 匹配 “acb”、”a#b” |
\d |
匹配数字 [0-9] | \d{3} 匹配 “123” |
\D |
匹配非数字 | \D 匹配 “a”、”#” |
\w |
匹配字母、数字、下划线 [a-zA-Z0-9_] | \w+ 匹配 “hello_123” |
\W |
匹配非字母数字下划线 | \W 匹配 “@”、”空格” |
\s |
匹配空白字符(空格、\t、\n) | a\sb 匹配 “a b” |
\S |
匹配非空白字符 | \S+ 匹配 “hello” |
[abc] |
匹配a、b、c中任意一个 | [aeiou] 匹配元音字母 |
[^abc] |
匹配除a、b、c外的任意字符 | [^0-9] 匹配非数字 |
[a-z] |
匹配a到z范围内任意字符 | [A-Z] 匹配大写字母 |
| |
或,匹配左右任意一个表达式 | cat|dog 匹配 “cat” 或 “dog” |
量词(重复)
| 符号 | 含义 |
|---|---|
* |
重复0次或多次 |
+ |
重复1次或多次 |
? |
重复0次或1次 |
{n} |
重复恰好n次 |
{n,} |
重复至少n次 |
{n,m} |
重复n到m次 |
# 量词演示
print(re.findall(r"\d{3}", "12 345 6789")) # ['345', '678']
print(re.findall(r"\d{2,4}", "12 345 6789")) # ['12', '345', '6789']
print(re.findall(r"ab*", "a ab abb abbb")) # ['a', 'ab', 'abb', 'abbb']
print(re.findall(r"ab+", "a ab abb abbb")) # ['ab', 'abb', 'abbb']
print(re.findall(r"ab?", "a ab abb abbb")) # ['a', 'ab', 'ab', 'ab']
贪婪匹配 vs 懒惰匹配
-
默认是贪婪匹配:尽可能多地匹配
-
量词后加
?变为懒惰匹配:尽可能少地匹配
text = "<div>内容1</div><div>内容2</div>"
# 贪婪:匹配整个字符串
print(re.findall(r”<div>.*</div>”, text))
# [‘<div>内容1</div><div>内容2</div>’]
# 懒惰:匹配每个div
print(re.findall(r”<div>.*?</div>”, text))
# [‘<div>内容1</div>’, ‘<div>内容2</div>’]
边界匹配(锚点)
| 符号 | 含义 |
|---|---|
^ |
匹配字符串开头 |
$ |
匹配字符串结尾 |
\b |
匹配单词边界 |
\B |
匹配非单词边界 |
print(re.findall(r"^\d+", "123abc")) # ['123'] 开头是数字
print(re.findall(r"\d+$", "abc123")) # ['123'] 结尾是数字
print(re.findall(r"\bcat\b", "cat concat")) # ['cat'] 完整单词
分组与捕获
# 普通捕获组 ()
m = re.search(r"(\d{3})-(\d{4})-(\d{4})", "电话:138-1234-5678")
print(m.groups()) # ('138', '1234', '5678')
# 命名捕获组 (?P<name>…)
m = re.search(r”(?P<area>\d{3})-(?P<number>\d{4}-\d{4})”, “138-1234-5678”)
print(m.group(“area”)) # 138
print(m.group(“number”)) # 1234-5678
# 非捕获组 (?:…)
m = re.search(r”(?:\d{3})-(\d{4}-\d{4})”, “138-1234-5678”)
print(m.groups()) # (‘1234-5678’,) 区号不捕获
# 反向引用 \n
print(re.search(r”(\w+)\s+\1″, “go go go”).group()) # go go
print(re.search(r”<(\w+)>.*?</\1>”, “<h1>标题</h1>”).group()) # <h1>标题</h1>
常用标志(Flags)
| 标志 | 含义 |
|---|---|
re.I 或 re.IGNORECASE |
忽略大小写 |
re.M 或 re.MULTILINE |
多行模式,^和$匹配每行开头结尾 |
re.S 或 re.DOTALL |
.匹配包括换行符在内的所有字符 |
re.A 或 re.ASCII |
只匹配ASCII字符 |
re.X 或 re.VERBOSE |
详细模式,可写注释和空白 |
text = "Hello\nWorld"
# 不匹配(第二行不是以H开头的整串)
print(re.search(r”^World”, text)) # None
# re.M多行模式
print(re.search(r”^World”, text, re.M).group()) # World
# re.I忽略大小写
print(re.findall(r”hello”, “Hello HELLO hello”, re.I)) # [‘Hello’, ‘HELLO’, ‘hello’]
# re.S让.匹配换行
print(re.search(r”Hello.World”, “Hello\nWorld”, re.S).group()) # Hello\nWorld
零宽断言
| 语法 | 含义 |
|---|---|
(?=...) |
正向先行断言:后面是… |
(?!...) |
负向先行断言:后面不是… |
(?<=...) |
正向后行断言:前面是… |
(?<!...) |
负向后行断言:前面不是… |
# 正向先行断言:匹配后面跟着数字的字母
print(re.findall(r"[a-z]+(?=\d)", "abc123 def456 xyz"))
# ['abc', 'def']
# 正向后行断言:匹配前面是@的用户名
print(re.search(r”(?<=@)\w+”, “用户@admin 登录”).group())
# admin
# 取价格(前面是¥的数字)
print(re.findall(r”(?<=¥)\d+”, “¥199 ¥299 ¥399”))
# [‘199’, ‘299’, ‘399’]
# 匹配不以大写字母开头-的字符串
re.search(r’^[A-Z](?<!Foo)\w+’, ‘Foobar’)
# None
compile预编译
当同一个正则表达式需要多次使用时,编译后效率更高:
pattern = re.compile(r"\d{3}-\d{8}|\d{4}-\d{7}")
print(pattern.search(“电话:010-88886666”).group()) # 010-88886666
print(pattern.search(“电话:0755-8888666”).group()) # 0755-8888666
print(pattern.findall(“010-88886666 0755-8888666”)) # [‘010-88886666’, ‘0755-8888666’]
实战示例
# 1. 验证邮箱
email = "user@example.com"
pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
print(bool(re.match(pattern, email))) # True
# 2. 提取URL
text = “访问 https://www.baidu.com 或 http://example.org”
urls = re.findall(r”https?://[^\s]+”, text)
print(urls) # [‘https://www.baidu.com’, ‘http://example.org’]
# 3. 提取中文
text = “Hello你好World世界”
print(re.findall(r”[\u4e00-\u9fa5]+”, text)) # [‘你好’, ‘世界’]
# 4. 驼峰转下划线
def camel_to_snake(name):
return re.sub(r”([A-Z])”, r”_\1″, name).lower().lstrip(“_”)
print(camel_to_snake(“getUserNameById”)) # get_user_name_by_id
# 5. 清洗HTML标签
html = “<p>这是<b>重要</b>内容</p>”
clean = re.sub(r”<[^>]+>”, “”, html)
print(clean) # 这是重要内容
# 6. 敏感词过滤
def filter_words(text, words):
for w in words:
text = re.sub(w, “*” * len(w), text)
return text
print(filter_words(“这是一个测试敏感词”, [“测试”, “敏感”]))
# 这是一个**的**词
正则示例:
# 导入re模块,正则表达式模块
import re
fgf = "----------------------------"
def fun():
print(fgf)
res = re.match("o","hello")
print(res)
# None无法调用group()方法
# print(res.group()) # Traceback (most recent call last):AttributeError: 'NoneType' object has no attribute 'group'
fun()
res = re.match("h","hello")
print(res)
print(res.group()) # 输出结果:h
fun()
# .匹配任意字符
res = re.match(".","@")
print(res)
print(res.group()) # 输出结果:@
fun()
# [] 匹配方括号中的任意字符
res = re.match("[a-zA-Z0-9_]","hhsdfa123")
print(res.group()) # 输出结果:h
fun()
# * 匹配零个或多个前面的字符
# r 表示原始字符串,避免转义字符
# \d 匹配数字,等价于 [0-9]
res = re.match(r"\d*","124123aaa123")
print(res.group()) # 输出结果:124123
fun()
# + 匹配一个或多个前面的字符
res = re.match(r"\d+","124123aaa123")
print(res.group()) # 输出结果:124123
fun()
# ? 匹配零个或一个前面的字符
res = re.match(r"\d?","124123aaa123")
print(res.group()) # 输出结果:1
print(res.group(0)) # 输出结果:1
# print(res.group(1)) # 报错:IndexError: no such group
# print(res.group(2)) # 报错:IndexError: no such group
fun()
# {} 匹配前面的字符指定次数
res = re.match(r"\d{3}","123")
print(res.group()) # 输出结果:123
res = re.match(r"\d{3}","12asdf")
# print(res.group()) # 报错:AttributeError: 'NoneType' object has no attribute 'group'
res = re.match(r"\d{1,3}","12asdf") # 匹配1到3个数字
print(res.group()) # 输出结果:12
fun()
# ^ 匹配字符串的开头
res = re.match(r"^\d","123asd")
print(res.group()) # 输出结果:1
# 注意: ^ 在 [] 中,表示对 [] 中的字符取反,即匹配 [] 中的字符
res = re.match(r"[^0-9]","123a")
# print(res.group()) # 报错:AttributeError: 'NoneType' object has no attribute 'group'
res = re.match(r"[^0-9]","aa123a")
print(res.group()) # 输出结果:a
fun()
# $ 匹配字符串的结尾
res = re.match(r"\d+","123asd")
print(res.group()) # 输出结果:123
res = re.match(r"\d+$","123asd") # 结尾不是多个数字结尾
# print(res.group()) # 报错:AttributeError: 'NoneType' object has no attribute 'group'
res = re.match(r"\d+$","123")
print(res.group()) # 输出结果:123
fun()
# 匹配分组
res = re.match(r"\d|\s","122 sdf")
print(res.group()) # 输出结果:1
regex = r"\w+@\w+\.(com|cc|net)"
res = re.match(regex,"123456@qq.com")
print(res.group())
fun()
# \num 匹配第num个分组的内容
html = r"<html><head></head><body><span>你好</span></body></html>"
res = re.match(r"<\w+>.*</\w+>",html)
print(res.group()) # 输出结果:<html><head></head><body><span>你好</span></body></html>
res = re.match(r"<(\w+)>.*</\1>",html)
print(res.group()) # 输出结果:<html><head></head><body><span>你好</span></body></html>
res = re.search(r"<(\w+)><(\w+)>.*</\2></\1>",html)
print(res.group()) # 输出结果:<body><span>你好</span></body>


![[Python] asyncio 异步编程实战指南:并发、超时控制与最佳实践-慕心博客](http://wp.blog.52muxin.com/wp-content/uploads/2026/05/微信图片_20250616082418.png)


![[Python] asyncio 异步编程实战指南:并发、超时控制与最佳实践-慕心博客](http://wp.blog.52muxin.com/wp-content/uploads/2026/05/ABE0F48BA411932204EF7867786D2633-scaled.png)
暂无评论内容