当前位置:首页>python>我写Python 10年了,才明白这几个道理,越早知道少走5年弯路

我写Python 10年了,才明白这几个道理,越早知道少走5年弯路

  • 2026-02-08 19:42:40
我写Python 10年了,才明白这几个道理,越早知道少走5年弯路

大家好,我是小甲鱼。

算下来,从第一次用Python写爬虫爬取小说资源,到现在用Python做后端开发、数据分析、自动化部署,整整10年了。

还记得10年前刚入互联网公司做Python开发,那会儿总觉得自己有点小聪明,领导让做一个电商用户数据清洗的脚本,要求一周交付,我三天就写完了,跑通几个测试用例后还沾沾自喜,跟同事炫耀自己写代码快。

结果半年后项目迭代,需要在原来的脚本基础上增加用户行为分析功能,我打开自己写的代码,当场懵了:变量名全是a、b、c、d,函数名就叫do_this、get_that,没有一句注释,一行代码里嵌套了三个三元表达式,改一行代码,整个脚本崩三处,最后加班一周才勉强改好。

当时组长拍着我的肩膀说:“写代码不是比谁快,而是比谁的代码能扛住时间的考验。”这句话我记了10年,这10年里,踩过坑、掉过坑、也填过无数坑,从那个追求“炫技”的愣头青,到现在写代码前先想“可读性”“可维护性”,慢慢才明白,Python编程的核心,从来不是掌握多少语法糖、多少高级特性,而是把那些最基础的道理落到实处。

今天就跟大家掏心窝子分享这10年悟出来的5个编程道理,不管你是刚入门的Python新手,还是写了两三年的开发者,希望能帮你少走一些弯路。

一、代码可读性 > 写得快

当年的错误理解

刚入行那会,总觉得写代码速度快、代码行数少就是牛。写代码时恨不得把所有逻辑挤在一行,变量名用单字母,函数名随便起,觉得加注释是“画蛇添足”,甚至觉得那些变量名写得长长的程序员,是“水平不行,靠名字凑”。

现在的正确认知

10年下来,我最大的感受是:代码是写给人看的,机器只负责执行

一个项目的生命周期里,写代码的时间最多占10%,剩下的90%都是阅读、修改、维护、迭代,甚至还有交接给其他开发者。如果代码的可读性差,后期的维护成本会呈指数级上升——你自己隔三个月再看,可能都看不懂自己写的是什么,更别说其他同事了。

那些为了“快”而牺牲可读性的代码,看似省了一时的功夫,实则为后续挖了一个巨大的坑。

具体案例 + 代码对比

比如要写一个计算学生语文成绩平均分的函数,当年的错误写法和现在的正确写法,差距一目了然:

错误写法

# 当年的炫技写法:行数少、速度快,但谁看谁懵
defcalc(a):
    b=0
    c=0
for i in a:
if i[1]!='缺考':b+=float(i[1]);c+=1
return b/c if c>0else0

正确写法

defcalculate_student_chinese_average(student_score_list: list) -> float:
"""
    计算学生语文成绩的平均分
    :param student_score_list: 学生成绩列表,元素格式为[姓名, 语文成绩]
    :return: 语文平均分,若无有效成绩返回0
    """

    total_score = 0.0# 语文总成绩
    valid_student_count = 0# 有效参考人数(排除缺考)

for student_info in student_score_list:
        score = student_info[1]
if score == "缺考":
continue
# 累加成绩和有效人数
        total_score += float(score)
        valid_student_count += 1

# 避免除零错误
if valid_student_count == 0:
return0.0
returnround(total_score / valid_student_count, 2)

给新手的建议

  1. 1. 变量名、函数名见名知意,用英文不用拼音,比如student_score而非xs_cjget_user_info而非get_user
  2. 2. 注释只写**“为什么做”**,不写“做什么”,代码本身能说明的事,不用画蛇添足;
  3. 3. 一行只写一个逻辑,拒绝嵌套多层三元表达式、多个赋值语句挤一行;
  4. 4. Python3.5+建议用类型注解,不仅自己看的清楚,IDE也能做语法检查,同事接手也快;
  5. 5. 善用空行分隔代码块,让代码的逻辑层级更清晰。

二、不要重复造轮子,善用库是核心能力

当年的错误理解

那会儿总有点“技术洁癖”,觉得自己写的代码才最靠谱,不管什么功能,都想自己手写实现。甚至觉得用第三方库是“偷懒”,会让自己的编程能力退化。

比如读取Excel文件,非要自己打开文件按行解析;做数据去重,自己写多层循环判断;就连时间格式化,都要自己拼字符串实现,总觉得这样才能掌握底层逻辑。

现在的正确认知

Python能火到今天,生态完善是它最大的优势——PyPI上有上百万个第三方库,几乎所有常见的开发需求,都有成熟的库可以解决。

这些库经过了成千上万开发者的测试、优化和迭代,稳定性、效率、边界处理能力,远高于我们临时手写的代码。善用库不是偷懒,而是对Python生态的尊重,也是提升开发效率的核心能力

曾经有一次,项目需要解析JSON数据并做严格的字段校验,我花了两天时间手写解析和校验逻辑,结果测试时发现各种边界问题:字段类型不对、空值传入、嵌套字段缺失……折腾了半天还没搞定。后来同事提醒我用Pydantic库,结果几行代码就实现了所有校验功能,还自带错误提示,那一刻我才明白,拒绝造轮子,才是聪明的选择。

具体案例 + 代码对比

比如实现“读取Excel文件并提取第一列数据”的功能,手写实现和用第三方库的差距:

错误写法(自己造轮子)

# 自己手写解析Excel,代码多、易出错、不支持复杂格式
defread_excel_first_col(file_path):
    data = []
withopen(file_path, 'r', encoding='utf-8'as f:
# 跳过表头
next(f)
for line in f:
# 按逗号分割,仅支持csv格式,xlsx格式直接报错
            col1 = line.strip().split(',')[0]
            data.append(col1)
return data

正确写法(善用Pandas库)

import pandas as pd

defread_excel_first_col(file_path: str) -> list:
"""
    读取Excel文件的第一列数据,支持xlsx/csv等多种格式
    :param file_path: Excel文件路径
    :return: 第一列数据列表
    """

# 一行代码读取Excel,自动处理表头、编码、格式问题
    df = pd.read_excel(file_path)
# 提取第一列数据并转为列表
    first_col_data = df.iloc[:, 0].tolist()
return first_col_data

给新手的建议

  1. 1. 遇到需求先想:“有没有现成的库可以解决?”,优先用Python官方标准库(os、sys、json、datetime),再用主流第三方库;
  2. 2. 常用的核心库一定要吃透:数据分析(Pandas、Numpy)、网络请求(Requests)、数据校验(Pydantic)、Web开发(FastAPI、Django)、爬虫(Scrapy、BeautifulSoup);
  3. 3. 学会查官方文档:Python官网、库的GitHub README,比看各种二手教程更靠谱;
  4. 4. 除非是核心业务需要定制化开发,否则不要为了“练手”而刻意造轮子。

三、测试代码很重要,不是“写完能跑就行”

当年的错误理解

刚写代码那会,我的标准只有一个:代码能跑就行

调试全靠print(),写完后手动点几下,输入几个正常的测试用例,能出结果就觉得没问题了,从来没想过写测试代码。甚至觉得写测试是“测试工程师的事”,开发只需要实现功能就行。

现在的正确认知

Python是动态语言,没有编译期的语法和类型检查,很多错误只有在运行时才会暴露——比如除零错误、空值调用、类型不匹配,这些问题在手动测试时很容易被忽略,但在线上环境中,一个小小的错误就可能导致服务崩溃。

测试代码不是额外的工作量,而是代码的“保险”。它能帮你提前发现边界问题、逻辑错误,更重要的是,后续修改代码时,能保证原有功能不被破坏(回归测试),让你改代码时“心里有底”。

曾经有一次,我写了一个订单金额计算的函数,手动测试了几个正常案例就上线了,结果有个用户的订单是0元优惠,触发了除零错误,直接导致线上支付服务崩了,不仅被领导批评,还加班到凌晨修复问题,从那以后,我写任何代码都会配对应的测试用例。

具体案例 + 代码对比

以一个简单的除法函数为例,对比“无测试”和“有测试”的写法,用Python自带的unittest库(无需额外安装):

错误写法(只写功能,不写测试)

# 只实现功能,未考虑除零、非数字输入等边界情况
defdivide(a, b):
return a / b

# 调试全靠print,仅测试正常情况
print(divide(102))  # 输出5.0,就认为代码没问题

正确写法(功能+测试用例)

import unittest

defdivide(a: float, b: float) -> float:
"""除法函数,处理除零错误"""
if b == 0:
raise ValueError("除数不能为0")
ifnotisinstance(a, (intfloat)) ornotisinstance(b, (intfloat)):
raise TypeError("输入必须为数字类型")
return a / b

# 编写测试用例,覆盖正常情况、边界情况、异常情况
classTestDivideFunction(unittest.TestCase):
# 测试正常除法
deftest_normal_divide(self):
self.assertEqual(divide(102), 5.0)
self.assertEqual(divide(-84), -2.0)

# 测试除数为0的异常
deftest_divide_by_zero(self):
withself.assertRaises(ValueError):
            divide(100)

# 测试非数字输入的异常
deftest_non_number_input(self):
withself.assertRaises(TypeError):
            divide(10"2")
withself.assertRaises(TypeError):
            divide("10"2)

if __name__ == '__main__':
    unittest.main()

给新手的建议

  1. 1. 从小代码开始养成写测试的习惯,优先用Python自带的unittest(无需装库),进阶用pytest
  2. 2. 测试用例重点覆盖边界情况:空值、0、极值、异常输入;
  3. 3. 调试少用print(),多用Python自带的pdb或IDE的调试工具(断点、单步执行);
  4. 4. 写测试的时间,会在后期调试、迭代中加倍赚回来,不要觉得浪费时间。

四、技术债务要及时还,别拖到积重难返

当年的错误理解

“先实现功能,后续再优化”,这句话我曾经奉为圭臬,甚至把它当成赶工期的“万能借口”。

为了赶上线,硬编码把配置写死在代码里、用多层if-else嵌套处理逻辑、忽略异常处理、把两个不相关的功能写在一个函数里……总想着“等项目上线了,有空再回来优化”,结果新项目、新需求源源不断,那些临时写的粗糙代码,就成了“技术债务”,越积越多。

现在的正确认知

技术债务就像信用卡欠款,暂时的便利背后,是高额的利息

少量的、有计划的技术债务是可以接受的,但如果为了赶工期刻意写烂代码,又不及时偿还,债务会越积越多,最后代码会变成“屎山”——逻辑缠在一起,改一处崩多处,想优化都无从下手,最后只能推倒重来,付出的成本是当初写代码的数倍。

曾经有一次做一个小型电商项目,为了赶7天上线,把商品价格、优惠规则全硬编码在代码里,用了9层if-else判断优惠,上线后每次改价格、改优惠,都要改代码重新部署,后来想优化,发现整个逻辑都缠在一起,最后只能花三倍的时间重构,悔不当初。

具体案例 + 代码对比

以“用户登录权限判断”为例,对比“留下技术债务”和“及时偿还债务”的写法:

错误写法(留下技术债务)

# 技术债务:硬编码、多层if-else、无解耦
defcheck_user_permission(username):
# 硬编码用户名和权限,改权限要改代码
if username == "admin":
ifTrue:  # 无意义的嵌套,为了赶工期随便写
return"超级管理员,拥有所有权限"
elif username == "user1"or username == "user2"or username == "user3":
return"普通用户,仅拥有查看权限"
else:
return"游客,无权限"

正确写法(偿还技术债务)

# 偿还债务:配置解耦、简化逻辑、易扩展
# 权限配置放到字典,后续修改只需改配置,不用改逻辑
USER_PERMISSION = {
"admin""超级管理员,拥有所有权限",
"user1""普通用户,仅拥有查看权限",
"user2""普通用户,仅拥有查看权限",
"user3""普通用户,仅拥有查看权限"
}

defcheck_user_permission(username: str) -> str:
"""
    检查用户权限
    :param username: 用户名
    :return: 权限描述
    """

# 简化逻辑,避免多层嵌套
return USER_PERMISSION.get(username, "游客,无权限")

# 后续要添加用户/修改权限,只需修改配置字典,无需改函数
USER_PERMISSION["user4"] = "普通用户,仅拥有查看权限"
USER_PERMISSION["admin"] = "超级管理员,拥有所有权限,可删除用户"

给新手的建议

  1. 1. 拒绝无意义的技术债务:能不用硬编码就不用,能解耦就解耦,能简化逻辑就不嵌套;
  2. 2. 若不得不写临时代码,一定要加TODO标记(比如# TODO: 2026-02-04 优化:将硬编码配置移到config.json),并在一周内完成优化;
  3. 3. 定期做小重构:每次迭代项目时,花10%-20%的时间优化原有代码,小步快跑偿还债务;
  4. 4. 赶工期不是写烂代码的理由,优雅的代码同样能快速实现。

五、持续学习,但不是“瞎学”

当年的错误理解

程序员要持续学习,这句话没错,但我曾经把“持续学习”理解成了“跟风学习”——什么火就学什么,看到别人学AI就跟着学PyTorch、TensorFlow,看到别人学区块链就跟着学相关库,看到新框架出来就立刻去学,没有目标,没有规划。

前几年AI大火,我花了三个月啃PyTorch教程,做了几个简单的图像识别小项目,结果我的工作方向是Python后端开发,那些AI知识几乎用不上,没过多久就全忘了,不仅耽误了本职工作的技术深耕,还搞得自己身心俱疲,觉得自己学了很多,却什么都没学精。

现在的正确认知

持续学习是程序员的必修课,但盲目的学习只是“假努力”

Python的生态更新很快,每天都有新库、新框架出来,如果你什么都想学,最后只会样样通、样样松。真正的学习,是围绕自己的工作场景和职业规划,有目标、有方向地学——先深耕核心技能,把工作中能用得上的技术学深学透,再拓展相关技能,最后再了解前沿技能,做到“主次分明”。

这几年我的学习原则是:工作需要的技术,优先学、学精;工作可能用到的技术,了解原理、会用即可;工作用不到的前沿技术,仅做关注,不花大量时间深耕。这样的学习方式,让我少了很多焦虑,也让每一次学习都能落地到实际工作中。

具体案例 + 学习规划对比

错误写法(瞎学,无目标)

Python入门 → 学Django → 学FastAPI → 学PyTorch → 学Scrapy → 学自动化测试 → 学大数据

样样学,样样不精,只会写Hello World,无法落地项目

正确写法(有目标,分方向)

# 以“Python后端开发”为职业方向的学习规划
第一步:打牢Python基础(数据类型、函数、类、异常处理、模块包)→ 必学、学精
第二步:深耕Web框架(FastAPI/Django)+ 数据库(MySQL/Redis)→ 必学、学精
第三步:拓展相关技能(接口测试pytest、部署Docker/Nginx、消息队列RabbitMQ)→ 重点学、会用
第四步:了解前沿技能(云原生、微服务)→ 仅做关注,工作需要再深入

每学一个技术,都做实战小项目,技术落地,形成自己的知识体系

给新手的建议

  1. 1. 基础不牢,地动山摇:先把Python核心基础学透,不要急于学高级框架和特性,比如连类和继承都没搞懂,就去学Django,只会事倍功半;
  2. 2. 先定职业方向:Python的应用方向很多(后端、数据分析、爬虫、自动化、AI),选一个自己感兴趣的方向深耕,不要贪多;
  3. 3. 学技术一定要结合实战:看10遍教程,不如自己写一个小项目,比如学了Requests,就写一个爬虫爬取天气数据;学了Pandas,就做一个学生成绩分析,让技术落地;
  4. 4. 拒绝知识焦虑:不用羡慕别人会很多技术,每个人的职业方向不同,把自己的核心技能练到极致,你就是专家。

写给Python新手的寄语

10年Python编程路,从一开始的“为了写代码而写代码”,到现在的“为了解决问题而写代码”,我最大的感悟是:编程从来不是一门只靠技术的手艺,更是一门关于取舍、关于思维的艺术

你不用追求一步到位写出完美的代码,但要追求持续改进;你不用什么技术都学,但要把核心技术学深学透;你不用害怕踩坑,因为每一个坑,都是你成长的垫脚石。

Python是一门很友好的语言,入门容易,但想要用好、用精,需要时间和沉淀。它的语法很简洁,却能解决复杂的问题,这也是我写了10年依然热爱它的原因。

愿你在Python的路上,少走弯路,多积跬步,以至千里。

金句卡片

编程的本质,是用优雅的方式解决实际的问题,而不是炫技。

互动时间

评论区聊聊吧!你学Python、写代码的过程中,踩过哪些印象深刻的坑?是变量名写太随意导致的?还是自己造轮子踩的雷?又或者是没写测试出的线上问题?
我是小甲鱼,专注Python编程分享,关注我,下次咱们继续聊Python的那些事~

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-08 21:23:57 HTTP/2.0 GET : https://f.mffb.com.cn/a/474380.html
  2. 运行时间 : 0.108401s [ 吞吐率:9.23req/s ] 内存消耗:4,511.48kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=efdfa464c18214c22f6b5cc762242560
  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.000381s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000579s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000303s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000274s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000519s ]
  6. SELECT * FROM `set` [ RunTime:0.000222s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000565s ]
  8. SELECT * FROM `article` WHERE `id` = 474380 LIMIT 1 [ RunTime:0.006036s ]
  9. UPDATE `article` SET `lasttime` = 1770557038 WHERE `id` = 474380 [ RunTime:0.000836s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000237s ]
  11. SELECT * FROM `article` WHERE `id` < 474380 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000526s ]
  12. SELECT * FROM `article` WHERE `id` > 474380 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.005450s ]
  13. SELECT * FROM `article` WHERE `id` < 474380 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.012186s ]
  14. SELECT * FROM `article` WHERE `id` < 474380 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.009853s ]
  15. SELECT * FROM `article` WHERE `id` < 474380 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.006440s ]
0.109962s