当前位置:首页>python>Python代码优化指南:10个让代码更优雅的技巧

Python代码优化指南:10个让代码更优雅的技巧

  • 2026-03-22 06:48:30
Python代码优化指南:10个让代码更优雅的技巧

告别烂代码10个实用技巧让你的Python程序更简洁、更高效🚀


📖 引言

哈喽,小伙伴们我是小甲鱼~ 🐟

今天要和大家聊聊一个非常重要的话题——Python代码优化

不知道你有没有遇到过这种情况:写了一段代码,跑是能跑,但总感觉哪里不对劲——要么太长太啰嗦,要么慢得像乌龟爬,再要么就是自己都看不懂自己写了啥 🤯

别慌今天小甲鱼就把自己压箱底的10个代码优化技巧全部拿出来,保证让你的代码从"又臭又长"变成"优雅又高效"

剧透一下:这些技巧都不难,小甲鱼保证初中生都能学会而且学会了之后,你写代码的效率至少提升一倍,不信往下看~


🔍 基础讲解

在正式开始之前,小甲鱼先和大家唠唠:为什么要优化代码

为什么要优化代码?

想象一下,你要去菜市场买菜:

  • • 烂代码就像用勺子挖井水——累死个人,效率还低
  • • 好代码就像用水管接水——轻轻一拧,水哗哗地来

代码优化主要有三个好处:

  1. 1. 读起来更爽——好的代码像读小说,烂的代码像读天书
  2. 2. 跑起来更快——优化过的代码,执行效率可能提升几十倍甚至几百倍
  3. 3. 维护更轻松——以后想改点啥,不用抓耳挠腮猜自己当初在想啥

好,废话不多说,让我们开始学习这10个技巧吧🎯


💡 技巧一:列表推导式——一行代码搞定循环

原来的写法

如果你想创建一个1到10的平方列表,你可能会这样写:

# 传统写法 - 又长又臭squares = []for i inrange(111):    squares.append(i ** 2)print(squares)# 输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

优化后的写法

# 列表推导式 - 一行搞定squares = [i ** 2for i inrange(111)]print(squares)# 输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

还能加条件!

# 只保留偶数的平方even_squares = [i ** 2for i inrange(111if i % 2 == 0]print(even_squares)# 输出: [4, 16, 36, 64, 100]

小甲鱼说

列表推导式就是Python的魔法棒,轻轻一挥,循环+ append的组合就没了记住这个公式:

[表达式 for 变量 in 可迭代对象 if 条件]
---## 💡 技巧二:enumerate和zip——循环的神仙伴侣### 原来的写法如果你想同时遍历列表的索引和值:```python# 传统写法 - 麻烦!fruits = ['苹果', '香蕉', '橘子']for i in range(len(fruits)):    print(f"第{i}个水果是: {fruits[i]}")# 输出:# 第0个水果是: 苹果# 第1个水果是: 香蕉# 第2个水果是: 橘子

优化后的写法

# enumerate - 自动给你索引fruits = ['苹果''香蕉''橘子']for i, fruit inenumerate(fruits, 1):  # 从1开始计数print(f"第{i}个水果是: {fruit}")# 输出:# 第1个水果是: 苹果# 第2个水果是: 香蕉# 第3个水果是: 橘子

zip:同时遍历两个列表

# 同时遍历名字和年龄names = ['小明''小红''小刚']ages = [182022]for name, age inzip(names, ages):print(f"{name}今年{age}岁")# 输出:# 小明今年18岁# 小红今年20岁# 小刚今年22岁

小甲鱼说

enumeratezip就是Python给懒人准备的礼物再也不用手动管理索引了,省心又省力👍


💡 技巧三:生成器——省内存的神器

原来的写法

如果你要处理一个超大的列表:

# 一次性生成所有数据 - 内存爆炸警告!numbers = [i ** 2for i inrange(1000000)]  # 这得占多少内存!for num in numbers:print(num)

优化后的写法

# 生成器 - 用多少取多少,不浪费!defsquare_generator(n):for i inrange(n):yield i ** 2# 使用生成器gen = square_generator(1000000)# 每次只取一个值,内存占用极低!for num in gen:print(num)if num > 100:  # 演示一下,不需要遍历全部break# 输出:# 0# 1# 4# 9# 16# ...# 121

一行生成器

# 还能用圆括号创建生成器gen = (i ** 2for i inrange(1000000))print(next(gen))  # 0print(next(gen))  # 1print(next(gen))  # 4

小甲鱼说

生成器就像自来水龙头,随用随取,不用提前把整个水库装满处理大数据时,这是保命的技能💧


💡 技巧四:字典的安全访问——告别KeyError

原来的写法

# 传统写法 - 容易出错!person = {'name''小明''age'18}# 访问不存在的键会报错!print(person['gender'])  # KeyError: 'gender'

优化后的写法

方法1:get()方法

person = {'name''小明''age'18}# get()方法 - 不存在就返回None,不会报错!gender = person.get('gender')print(gender)  # None# 还能指定默认值gender = person.get('gender''未知')print(gender)  # 未知

方法2:setdefault()

person = {'name''小明''age'18}# 如果键不存在,就设置为默认值person.setdefault('gender''未知')print(person)  # {'name': '小明', 'age': 18, 'gender': '未知'}# 如果键已存在,就不改变person.setdefault('name''小红')print(person['name'])  # 小明(还是原来的值)

小甲鱼说

get()setdefault()就是字典的安全气囊,关键时刻能救你的程序一命再也不用写一堆if key in dict的判断了🚗


💡 技巧五:f-string——最强大的字符串格式化

原来的写法

# 老式写法 - 麻烦!name = '小明'age = 18height = 1.75# %格式化print("我叫%s,今年%d岁,身高%.2f米" % (name, age, height))# format方法print("我叫{},今年{}岁,身高{:.2f}米".format(name, age, height))

优化后的写法

# f-string - 简单粗暴直接插入变量!name = '小明'age = 18height = 1.75print(f"我叫{name},今年{age}岁,身高{height:.2f}米")# 输出: 我叫小明,今年18岁,身高1.75米# 还能运算!print(f"明年我就{age + 1}岁了")# 输出: 明年我就19岁了

f-string的高级用法

# 格式化数字num = 1234.5678print(f"金额: {num:,.2f}")  # 金额: 1,234.57# 对齐names = ['小明''小红''小刚']for name in names:print(f"{name:^10}爱你")  # 居中对齐# 输出:#    小明    爱你#    小红    爱你#    小刚    爱你

小甲鱼说

f-string是Python 3.6引入的神器,简单程度直接秒杀其他所有格式化方式记住,变量名往大括号里一堆就能用,谁用谁知道😎


💡 技巧六:集合操作——去重和快速查找

原来的写法

# 想去掉列表中的重复元素?items = [1223334444]# 传统方法 - 麻烦!unique = []for item in items:if item notin unique:        unique.append(item)print(unique)  # [1, 2, 3, 4]

优化后的写法

# set - 一行搞定去重!items = [1223334444]unique = list(set(items))print(unique)  # [1, 2, 3, 4]# 注意:set是无序的,如果需要保持顺序,可以用 dict.fromkeys()unique_ordered = list(dict.fromkeys(items))print(unique_ordered)  # [1, 2, 3, 4]

集合的快速查找

# 判断元素是否在列表中 - O(n)复杂度items = [12345678910]print(5in items)  # True - 列表需要遍历# 判断元素是否在集合中 - O(1)复杂度items_set = {12345678910}print(5in items_set)  # True - 集合直接定位,超级快!

集合运算

# 集合的交、并、差运算set_a = {12345}set_b = {45678}print(set_a | set_b)  # 并集: {1, 2, 3, 4, 5, 6, 7, 8}print(set_a & set_b)  # 交集: {4, 5}print(set_a - set_b)  # 差集: {1, 2, 3}print(set_a ^ set_b)  # 对称差集: {1, 2, 3, 6, 7, 8}

小甲鱼说

集合就是Python的超级英雄,去重、查找、集合运算,样样精通记住,如果你的代码需要频繁判断"在不在"列表里,赶紧换成set,速度提升不是一点半点🦸


💡 技巧七:装饰器——代码的复用神器

什么是装饰器?

装饰器可以在不修改原函数的情况下,给函数增加新功能就像给函数穿上一件外套

实战应用

# 定义一个装饰器 - 打印函数执行时间import timedeftimer(func):defwrapper(*args, **kwargs):        start = time.time()        result = func(*args, **kwargs)        end = time.time()print(f"函数{func.__name__}执行了{end - start:.4f}秒")return resultreturn wrapper# 使用装饰器@timerdefslow_function():    time.sleep(1)  # 模拟耗时操作return"执行完成!"# 调用函数result = slow_function()# 输出: 函数slow_function执行了1.0012秒

装饰器的常见用途

# 1. 日志记录deflog(func):defwrapper(*args, **kwargs):print(f"调用函数: {func.__name__}")return func(*args, **kwargs)return wrapper# 2. 权限检查defrequire_login(func):defwrapper(user):if user.get('is_login'):return func(user)else:return"请先登录!"return wrapper# 使用@require_logindefget_profile(user):returnf"欢迎{user['name']}!"# 测试user1 = {'name''小明''is_login'True}user2 = {'name''小红''is_login'False}print(get_profile(user1))  # 欢迎小明!print(get_profile(user2))  # 请先登录!

小甲鱼说

装饰器就是Python的瑞士军刀,一用一个准日志、权限检查、性能监控,统统一行代码搞定学会了这个,你就是同事眼中的大神🎩


💡 技巧八:with语句——资源管理的贴心管家

原来的写法

# 传统文件操作 - 容易忘记关闭!f = open('test.txt''w')f.write('你好')f.close()  # 忘记关就麻烦了!# 如果中途出错,文件可能没关闭!# f = open('test.txt', 'w')# f.write('你好')# raise Exception("出错了!")  # 这时候f.close()根本执行不到!

优化后的写法

# with语句 - 自动帮你关闭资源!withopen('test.txt''w', encoding='utf-8'as f:    f.write('你好,小甲鱼!')# 即使这里出错,文件也会正确关闭# 文件自动关闭了,可以继续用withopen('test.txt''r', encoding='utf-8'as f:    content = f.read()print(content)  # 你好,小甲鱼!

with语句的原理

# 上下文管理器协议classMyContextManager:def__enter__(self):print("进入上下文")returnselfdef__exit__(self, exc_type, exc_val, exc_tb):print("退出上下文")# 如果返回True,异常会被吞掉returnFalsewith MyContextManager() as cm:print("在上下文中执行")# 即使出错,也会执行__exit__# 输出:# 进入上下文# 在上下文中执行# 退出上下文

小甲鱼说

with语句就是Python的贤内助,把资源管理得妥妥的文件、数据库、网络连接,用with就对了再也不用担心忘记close()了🏠


💡 技巧九:isinstance——更智能的类型检查

原来的写法

# 硬编码类型检查 - 不好!defprocess(data):iftype(data) == str:return data.upper()eliftype(data) == int:return data * 2eliftype(data) == list:returnsum(data)

优化后的写法

# isinstance - 支持继承关系!defprocess(data):ifisinstance(data, str):return data.upper()elifisinstance(data, (intfloat)):  # 同时检查多个类型return data * 2elifisinstance(data, list):returnsum(data)# 测试print(process("hello"))    # HELLOprint(process(10))         # 20print(process(3.14))       # 6.28print(process([123]))  # 6

isinstance的高级用法

# 检查自定义类classAnimal:passclassDog(Animal):passclassCat(Animal):passdog = Dog()# isinstance考虑继承关系print(isinstance(dog, Dog))    # Trueprint(isinstance(dog, Animal)) # True - Dog是Animal的子类!# type不考虑继承print(type(dog) == Animal)     # False

鸭子类型

# 更好的方式:鸭子类型# 不要检查类型,而是检查行为defprocess(data):# 如果有upper方法,就调用它ifhasattr(data, 'upper'):return data.upper()# 如果可以相乘elifhasattr(data, '__mul__'):return data * 2# 如果可以求和elifhasattr(data, '__add__'):returnsum(data)# 这样更灵活,字符串、数字、列表都能处理!

小甲鱼说

isinstance就是Python的智能雷达,不仅能检测类型,还能检测子类而且要学会"鸭子类型"思维——不要问它是什么,要问它能做什么🦆


💡 技巧十:异常处理——让代码更健壮

原来的写法

# 用if判断来处理错误 - 代码又臭又长!defdivide(a, b):if b == 0:return"不能除以0!"else:return a / b# 每个地方都要判断,烦不烦?result = divide(100)print(result)

优化后的写法

# 用try-except - 更优雅!defdivide(a, b):try:return a / bexcept ZeroDivisionError:return"不能除以0!"# 测试print(divide(102))  # 5.0print(divide(100))  # 不能除以0!

多个异常处理

# 处理多种异常defprocess(data):try:        result = int(data) / 0return resultexcept ValueError:return"无法转换为数字"except ZeroDivisionError:return"不能除以0"except Exception as e:returnf"未知错误: {e}"print(process("abc"))  # 无法转换为数字print(process("10"))   # 不能除以0

try-except-else-finally

# 完整的异常处理结构try:# 尝试执行的代码    result = 10 / 2except ZeroDivisionError:# 发生ZeroDivisionError时执行print("除以0了!")else:# 没有异常时执行print(f"计算结果是{result}")finally:# 无论有没有异常都执行print("这段代码无论如何都会执行")# 输出:# 计算结果是5.0# 这段代码无论如何都会执行

异常处理实战

# 读取文件,兼容各种错误defread_file(filename):try:withopen(filename, 'r', encoding='utf-8'as f:return f.read()except FileNotFoundError:returnf"文件{filename}不存在"except PermissionError:returnf"没有权限读取{filename}"except UnicodeDecodeError:return"文件编码错误"# 完美!print(read_file('不存在的文件.txt'))  # 文件不存在的文件.txt不存在

小甲鱼说

异常处理就是Python的安全网,程序出错了不会直接崩溃,而是优雅地处理记住,用try-except而不是if-else来处理异常,这是Python的哲学🕸️


🚀 实战应用

光说不练假把式小甲鱼这就带大家做一个实战项目,把今天学的技巧都用上

项目:学生信息管理系统

"""学生信息管理系统 v2.0用上我们今天学的所有技巧!"""classStudent:"""学生类"""def__init__(self, name, age, score):self.name = nameself.age = ageself.score = scoredef__repr__(self):returnf"Student(name='{self.name}', age={self.age}, score={self.score})"classStudentManager:"""学生管理系统 - 优化版"""def__init__(self):# 使用字典存储学生,id为键self.students = {}self.next_id = 1# 技巧七:装饰器 - 添加日志功能deflog_operation(func):"""记录操作日志的装饰器"""defwrapper(self, *args, **kwargs):print(f"\n[操作] 开始执行: {func.__name__}")            result = func(self, *args, **kwargs)print(f"[操作] 完成: {func.__name__}")return resultreturn wrapper# 技巧一:列表推导式 - 快速添加学生    @log_operationdefadd_student(self, name, age, score):"""添加学生"""# 技巧四:字典安全访问 - 不需要# 技巧五:f-string - 格式化输出        student_id = self.next_idself.students[student_id] = Student(name, age, score)self.next_id += 1print(f"✅ 添加成功: {name}, 学号: {student_id}")return student_id    @log_operationdefadd_multiple_students(self, student_list):"""批量添加学生 - 使用列表推导式"""# 列表推导式 + 生成器        student_ids = [self.add_student(name, age, score) for name, age, score in student_list        ]print(f"✅ 批量添加了 {len(student_ids)} 个学生")return student_ids# 技巧二:enumerate - 遍历学生列表deflist_students(self):"""列出所有学生"""ifnotself.students:print("📭 还没有学生记录")returnprint("\n📋 学生列表:")print("-" * 50)# enumerate + f-stringfor i, (sid, student) inenumerate(self.students.items(), 1):print(f"{i}. 学号:{sid} | 姓名:{student.name} | "f"年龄:{student.age} | 分数:{student.score}")print("-" * 50)# 技巧三:生成器 - 遍历高分学生defget_top_scorers(self, threshold=60):"""获取高分学生 - 使用生成器"""# 生成器表达式return (            (sid, student) for sid, student inself.students.items() if student.score >= threshold        )defshow_top_scorers(self, threshold=60):"""显示高分学生"""print(f"\n🏆 分数 >= {threshold} 的学生:")        top_students = list(self.get_top_scorers(threshold))ifnot top_students:print("没有找到高分学生")return# 技巧二:zip - 同时展示排名for rank, (sid, student) inenumerate(top_students, 1):print(f"  {rank}{student.name} - {student.score}分")# 技巧六:集合操作 - 查找学生defsearch_by_name(self, name):"""搜索学生 - 使用集合"""# 找到所有名字包含关键字的学生        results = {            sid: student for sid, student inself.students.items() if name in student.name        }return results# 技巧八:with语句 - 安全的文件操作defsave_to_file(self, filename="students.txt"):"""保存到文件"""try:withopen(filename, 'w', encoding='utf-8'as f:for sid, student inself.students.items():# 技巧五:f-string 格式化                    f.write(f"{sid},{student.name},{student.age},{student.score}\n")print(f"💾 已保存到 {filename}")except Exception as e:print(f"❌ 保存失败: {e}")defload_from_file(self, filename="students.txt"):"""从文件加载"""try:withopen(filename, 'r', encoding='utf-8'as f:# 读取并解析for line in f:                    line = line.strip()ifnot line:continue                    parts = line.split(',')iflen(parts) == 4:                        sid, name, age, score = partsself.students[int(sid)] = Student(name, int(age), float(score))self.next_id = max(self.next_id, int(sid) + 1)print(f"📂 已从 {filename} 加载")except FileNotFoundError:print(f"📁 文件 {filename} 不存在")except Exception as e:print(f"❌ 加载失败: {e}")# 技巧十:异常处理 - 安全的删除操作    @log_operationdefdelete_student(self, student_id):"""删除学生"""try:# 技巧九:isinstance 类型检查ifnotisinstance(student_id, int):                student_id = int(student_id)# 技巧四:字典安全访问            student = self.students.get(student_id)if student isNone:print(f"❌ 学号 {student_id} 不存在")returnFalsedelself.students[student_id]print(f"🗑️ 已删除学生: {student.name}")returnTrueexcept ValueError:print("❌ 学号必须是数字")returnFalseexcept Exception as e:print(f"❌ 删除失败: {e}")returnFalse# ==================== 主程序 ====================defmain():"""主程序 - 演示所有功能"""print("=" * 50)print("🎓 学生信息管理系统 v2.0")print("=" * 50)# 创建管理器    manager = StudentManager()# 1. 批量添加学生 - 用列表推导式print("\n【添加学生】")    students_data = [        ("小明"1885),        ("小红"1992),        ("小刚"2078),        ("小丽"1895),        ("小强"1988),    ]    manager.add_multiple_students(students_data)# 2. 列出所有学生 - 用enumerateprint("\n【查看学生】")    manager.list_students()# 3. 显示高分学生 - 用生成器print("\n【高分学生】")    manager.show_top_scorers(85)# 4. 搜索学生 - 用字典推导式print("\n【搜索学生】")    results = manager.search_by_name("小")print(f"找到 {len(results)} 个包含'小'的学生:")for sid, s in results.items():print(f"  - {s.name}")# 5. 删除学生 - 用异常处理print("\n【删除学生】")    manager.delete_student(1)    manager.list_students()# 6. 保存和加载 - 用with语句print("\n【文件操作】")    manager.save_to_file()    manager.load_from_file()print("\n" + "=" * 50)print("🎉 程序结束!")print("=" * 50)if __name__ == "__main__":    main()

运行结果

==================================================🎓 学生信息管理系统 v2.0==================================================[操作] 开始执行: add_multiple_students[操作] 完成: add_multiple_students✅ 批量添加了 5 个学生【查看学生】📋 学生列表:--------------------------------------------------1. 学号:1 | 姓名:小明 | 年龄:18 | 分数:85.02. 学号:2 | 姓名:小红 | 年龄:19 | 分数:92.03. 学号:3 | 姓名:小刚 | 年龄:20 | 分数:78.04. 学号:4 | 姓名:小丽 | 年龄:18 | 分数:95.05. 学号:5 | 姓名:小强 | 年龄:19 | 分数:88.0--------------------------------------------------【高分学生】🏆 分数 >= 85 的学生:  1. 小红 - 92.0分  2. 小丽 - 95.0分  3. 小强 - 88.0分  4. 小明 - 85.0分

代码亮点总结

看看我们用到了多少技巧:

技巧
应用场景
列表推导式
批量添加学生、搜索学生
enumerate
列出学生列表
生成器
获取高分学生
字典get()
安全访问学生信息
f-string
所有字符串格式化
集合/字典推导式
搜索功能
装饰器
日志记录
with语句
文件读写
isinstance
类型检查
异常处理
删除、保存、加载操作

⚠️ 常见错误

小甲鱼在这里罗列几个新手最容易犯的错误,看看你中招了没

❌ 错误1:不要在循环里修改列表

# 错误做法!nums = [12345]for n in nums:if n % 2 == 0:        nums.remove(n)print(nums)  # 结果不可预测!# 正确做法:创建新列表nums = [12345]nums = [n for n in nums if n % 2 != 0]print(nums)  # [1, 3, 5]

❌ 错误2:不要用可变对象作为默认参数

# 错误做法!defadd_item(item, list=[]):  # 危险!list.append(item)returnlistprint(add_item(1))  # [1]print(add_item(2))  # [1, 2] - 预期是[2]吧?# 正确做法defadd_item(item, list=None):iflistisNone:list = []list.append(item)returnlist

❌ 错误3:不要滥用列表推导式

# 错误做法!列表推导式不是万能的result = []for i inrange(10):for j inrange(10):        result.append(i * j)# 这就不应该用列表推导式,代码反而更难读!# 正确做法:简单的情况用推导式,复杂的情况用普通循环result = [i * j for i inrange(10for j inrange(10)]  # 这个还可以# 但更复杂的逻辑还是用循环吧,别硬凑!

❌ 错误4:不要忘记关闭文件

# 错误做法!f = open('data.txt''r')content = f.read()# 如果这里出错,文件永远不会关闭!# 正确做法:永远用with!withopen('data.txt''r'as f:    content = f.read()# 自动关闭,妥妥的!

❌ 错误5:不要用异常代替流程控制

# 错误做法!try:    result = data['key']except KeyError:    result = '默认值'# 正确做法:用get()result = data.get('key''默认值')# 只有在真正"异常"的情况下才用try-except

📌 总结

好啦今天小甲鱼带大家一起学习了10个Python代码优化技巧,让我们来回顾一下:

技巧
核心作用
难度
列表推导式
一行代码搞定循环
enumerate和zip
优雅遍历索引和值
生成器
省内存的神器
⭐⭐
字典安全访问
告别KeyError
f-string
最强字符串格式化
集合操作
去重和快速查找
⭐⭐
装饰器
代码复用神器
⭐⭐⭐
with语句
资源管理专家
isinstance
智能类型检查
⭐⭐
异常处理
让代码更健壮
⭐⭐

记住这三点

  1. 1. 代码首先是给人看的,其次才是给机器跑的——写代码要考虑到以后维护的人(包括你自己)
  2. 2. 过早优化是万恶之源——先让代码跑起来,再考虑优化,不要为了优化而优化
  3. 3. 实践出真知——光学不用假把式,一定要动手敲代码!

👋 行动引导

好了,今天的教程就到这里🎉

课后作业

  1. 1. 练一练:把之前写过的代码,用今天学的技巧重新写一遍
  2. 2. 想一想:在日常编程中,还有哪些地方可以优化?
  3. 3. 用一用:下次写Python代码时,试试列表推导式和f-string

互动时间

小伙伴们,你们学废了吗🐟

有什么问题,或者想要小甲鱼讲解什么其他Python知识点,评论区留言告诉我

如果觉得这篇文章对你有帮助,一键三连(点赞、在看、转发)支持一下小甲鱼你们的支持是我创作的最大动力

下期预告:下一期小甲鱼会教大家Python爬虫实战,敬请期待🔍


📢 公众号:Python小甲鱼*🔗 让编程成为一种乐趣*

# 最后的彩蛋!print("感谢阅读!欢迎关注【Python小甲鱼】公众号 🐟")print("一键三连支持一下! 👍❤️📢")

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 16:49:38 HTTP/2.0 GET : https://f.mffb.com.cn/a/481569.html
  2. 运行时间 : 0.212303s [ 吞吐率:4.71req/s ] 内存消耗:4,979.84kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=8dbe5df22901ae305fd765f003aedc41
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001157s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001699s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000761s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000691s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001375s ]
  6. SELECT * FROM `set` [ RunTime:0.000625s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001586s ]
  8. SELECT * FROM `article` WHERE `id` = 481569 LIMIT 1 [ RunTime:0.001591s ]
  9. UPDATE `article` SET `lasttime` = 1774601378 WHERE `id` = 481569 [ RunTime:0.006713s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000699s ]
  11. SELECT * FROM `article` WHERE `id` < 481569 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.002394s ]
  12. SELECT * FROM `article` WHERE `id` > 481569 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001397s ]
  13. SELECT * FROM `article` WHERE `id` < 481569 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.006329s ]
  14. SELECT * FROM `article` WHERE `id` < 481569 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.008318s ]
  15. SELECT * FROM `article` WHERE `id` < 481569 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.009336s ]
0.216250s