当前位置:首页>python>《Python 从入门到精通》090|模块与标准库实战:写出更像“正式项目”的代码

《Python 从入门到精通》090|模块与标准库实战:写出更像“正式项目”的代码

  • 2026-06-30 00:40:46
《Python 从入门到精通》090|模块与标准库实战:写出更像“正式项目”的代码

前面这十章,我们其实一直在做一件事:

让你的 Python 代码,从“能跑的小练习”,一步步走向“更像正式项目的代码”。

你已经学了:

为什么代码要拆文件 什么是模块、什么是包import 的几种写法 自己写的代码也可以变成模块__name__ == '__main__' 到底在控制什么 Python 为什么自带那么多标准库ossysrandomdatetimemathstatisticscollections 这些工具各自解决什么问题

如果这些内容一直分开看,很多人会觉得:单个知识点我懂了,但真要我自己写一个稍微像样的小程序,还是不知道怎么把它们拼起来。

所以这一章,我们就不再拆着讲,而是做一个完整的综合实战。目标非常明确:

把模块、导入、主程序入口、标准库这些内容真正串起来,写一个更像“正式项目”的小工具。

这次我们做一个非常适合当前阶段的项目:

命令行随机点名与记录工具

这个项目不大,但很有代表性。因为它会同时用到:

模块拆分 自定义模块 标准库 程序入口 路径处理 时间记录 随机功能

而这些,正好就是这一阶段最该落地的内容。

一、先看需求,不要急着写代码

还是老规矩。 一上来不要先敲代码,先把需求拆清楚。

我们现在想做一个小工具,功能如下:

读取一个学生名单 随机抽取一名同学 显示抽中的结果 记录抽取时间 把抽取结果保存到本地文件 程序可以反复运行 代码不要全堆在一个文件里

你会发现,这个需求虽然简单,但已经非常像真实的小工具了。

它不是只在终端里打一行结果就完事。 它还涉及:

输入数据 随机逻辑 时间处理 文件输出 模块组织

这就特别适合用来练“更像项目的写法”。

二、先想结构:哪些代码应该放在一起

如果你现在已经有模块意识,就应该先想到一件事:

这些内容不应该全部堆进 main.py

更合理的拆法可以是这样:

picker.py负责随机点名逻辑

file_utils.py负责文件读写相关逻辑

main.py负责程序入口和整体流程

如果你想再规范一点,还可以加一个数据文件,比如:

students.txt

于是整个小项目可以长成这样:

roll_call_project/    students.txt    picker.py    file_utils.py    main.py

你看,这就是模块思维真正落地的样子。

不是说“我知道模块是什么”, 而是“我知道哪些代码应该放在哪个文件里”。

这一步非常关键。

三、第一步,先准备学生名单文件

先建一个 students.txt,内容比如这样:

张三李四王五赵六小明小红

你现在可能会觉得,这不就是一份普通文本吗。

没错。 但一旦你开始做小工具,就会发现:很多程序的第一步,本来就是从一份本地数据开始。

所以这个项目的输入,就是这份名单文件。

四、第二步,写 file_utils.py,专门处理文件相关能力

既然我们要读名单、还要写抽取记录,那文件操作就应该集中管理。

可以写成这样:

# file_utils.pydefload_students(filename):    students = []with open(filename, 'r', encoding='utf-8'as f:for line in f:            name = line.strip()if name:                students.append(name)return studentsdefsave_result(filename, content):with open(filename, 'a', encoding='utf-8'as f:        f.write(content + '\n')

这一段代码其实很有代表性。

load_students()负责读取名单文件,并返回一个列表

save_result()负责把抽取结果追加保存到文件

这里你会发现,前面学的文件读写、with、函数封装,其实都已经自然用上了。

而且很重要的一点是:

文件逻辑被单独放进了一个模块。

这意味着主程序不用再自己管怎么读文件、怎么写文件。 主程序只管调用它。

这就是模块带来的清晰感。

五、第三步,写 picker.py,专门处理随机抽取逻辑

随机点名显然和 random 模块有关,所以可以把这部分单独放到另一个模块里:

# picker.pyimport randomdefpick_student(students):ifnot students:returnNonereturn random.choice(students)

这段代码非常短,但很重要。

为什么?

因为它在做一件特别“模块化”的事:

把随机抽取这件事,封装成一个明确的小功能。

以后只要你有一个学生列表,谁来抽,都用这个函数。 而不是每次都在主程序里自己写一遍:

random.choice(students)

这就是“把能力整理成模块函数”的味道。

六、第四步,主程序 main.py 负责把一切串起来

现在轮到主程序出场了。

它要做的事情其实很清楚:

读取学生名单 随机抽一个人 拿到当前时间 把结果打印出来 再保存到记录文件

于是可以写:

# main.pyfrom datetime import datetimefrom file_utils import load_students, save_resultfrom picker import pick_studentdefmain():    students = load_students('students.txt')ifnot students:        print('名单为空,无法抽取')return    winner = pick_student(students)    now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')    result = f'抽中学生:{winner},时间:{now}'    print(result)    save_result('result.txt', result)    print('结果已保存到 result.txt')if __name__ == '__main__':    main()

这一段代码特别值得你认真看一遍。

为什么它像“正式项目”的代码?

因为它没有把所有逻辑都糊在一个文件里。 它是通过模块之间的分工,把整个功能拼起来的。

load_students()来自文件工具模块

pick_student()来自随机点名模块

datetime.now()来自标准库

main()负责主流程

if __name__ == '__main__':负责主程序入口

这已经非常像一个小型正式脚本了。

七、这段代码里,模块和标准库是怎么配合的

这一章的核心,其实就在这里。

你会发现,程序并不是只靠自定义模块,也不是只靠标准库,而是两者配合。

自定义模块负责:

你的业务逻辑 你的项目结构 你的功能拆分

标准库负责:

随机能力 时间能力 文件系统基础支持

比如这里:

picker.py 是你自己写的模块file_utils.py 也是你自己写的模块datetime 是标准库random 也是标准库

这就很像真实开发了。

你自己搭项目骨架,标准库负责补上高频通用能力。

这句话你可以记住。它特别能概括这一阶段的本质。

八、为什么这个项目比“全写一个文件”强很多

我们来直接对比一下。

如果你把所有东西都堆进一个文件,会怎么样?

读名单的代码和随机逻辑混在一起 保存结果的代码和时间处理混在一起 主流程和底层工具细节混在一起 文件一长,自己看着都累

而现在这个拆法有什么好处?

file_utils.py 一看就知道是处理文件的picker.py 一看就知道是抽取逻辑main.py 一看就知道是程序入口

这带来的提升,不只是“看起来更整洁”,而是:

更容易维护 更容易定位问题 更容易替换功能 更容易复用代码

比如以后你想把随机点名改成随机抽 3 人,只要改 picker.py 相关逻辑就行。 主程序几乎不用大动。

这就是模块化真正的价值。

九、为什么 main() 和 __name__ == '__main__' 组合特别重要

你现在应该已经能看出,这个项目里:

defmain():    ...

和:

if __name__ == '__main__':    main()

是一组非常自然的搭配。

为什么这样写更好?

因为主流程被单独封装成了一个函数。 文件被导入时,不会自动乱跑。 只有你直接运行 main.py,程序才真正开始执行。

这会让结构特别清楚:

上面是定义 下面是入口

这一点在小项目里尤其重要。 因为代码一旦开始拆模块,你就不再适合所有文件一打开就立刻执行一堆逻辑。

十、再把 os 也接进来,让项目更稳一点

前面这个版本已经能用了。 但如果我们想让它更像正式脚本,还可以继续加一点 os 模块的味道。

比如先检查名单文件是否存在:

# main.pyimport osfrom datetime import datetimefrom file_utils import load_students, save_resultfrom picker import pick_studentdefmain():ifnot os.path.exists('students.txt'):        print('students.txt 文件不存在,程序结束')return    students = load_students('students.txt')ifnot students:        print('名单为空,无法抽取')return    winner = pick_student(students)    now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')    result = f'抽中学生:{winner},时间:{now}'    print(result)    save_result('result.txt', result)    print('结果已保存到 result.txt')if __name__ == '__main__':    main()

这样一来,程序就更稳了。

如果名单文件压根不存在,它不会直接崩。 而是先检查,再给出清楚提示。

这就是标准库在真实项目里特别实用的地方:

不是花哨,而是让脚本更稳。

十一、如果再把 sys 也接进来,程序还能更灵活

比如你不想把名单文件名写死成 students.txt,而是想从命令行传进来。

那就可以写成这样:

# main.pyimport osimport sysfrom datetime import datetimefrom file_utils import load_students, save_resultfrom picker import pick_studentdefmain():if len(sys.argv) < 2:        print('用法:python main.py 名单文件名')return    filename = sys.argv[1]ifnot os.path.exists(filename):        print(f'{filename} 文件不存在,程序结束')return    students = load_students(filename)ifnot students:        print('名单为空,无法抽取')return    winner = pick_student(students)    now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')    result = f'抽中学生:{winner},时间:{now}'    print(result)    save_result('result.txt', result)    print('结果已保存到 result.txt')if __name__ == '__main__':    main()

这样运行时可以这样写:

python main.py students.txt

你看,项目味道是不是一下更浓了。

现在它已经不只是一个“写死的小脚本”,而是开始具备:

可配置输入 环境检查 主流程入口 模块化组织

这其实已经是非常标准的小工具写法了。

十二、这时候你应该真正理解“更像正式项目的代码”是什么意思了

很多人一开始会把“正式项目代码”想得特别复杂,仿佛一定要上数据库、上网络、上前后端才算正式。其实不是。

所谓“更像正式项目的代码”,往往先体现在这些地方:

有清晰的模块拆分 有主程序入口 有异常或边界检查 有标准库辅助能力 有输入输出的明确边界 有一定的复用意识

而这一章这个小项目,已经把这些感觉都带出来了。

它当然还不大。 但它已经明显不是那种“为了练语法临时拼一下”的代码了。

这一步特别重要。因为它会让你逐渐摆脱一种误区:

不是项目一定要做得很大才算项目。 而是结构开始像项目,思路开始像项目,那就已经在往项目代码靠近了。

十三、这个小项目里,每个文件各自负责什么

这一步你最好能清楚说出来。

file_utils.py负责和文件读写有关的底层能力

picker.py负责随机抽取逻辑

main.py负责程序整体流程控制

标准库 random负责随机能力

标准库 datetime负责时间记录

标准库 os负责文件存在性检查

标准库 sys负责获取命令行参数

你会发现,这种拆法特别像真实工作中的分工:

谁干自己的事 谁负责主流程 谁负责底层工具 谁负责外部输入

只要你能把这种“职责分配感”看清,模块和标准库这几章就是真的学进去了。

十四、再做一个小升级:把结果按日期分文件保存

如果你想让这个工具更像一点正式产品,可以继续优化。

比如结果文件不固定写成 result.txt,而是每天一个文件。 这时候 datetime 和 os.path.join() 就可以继续上场。

例如:

import osfrom datetime import datetimetoday = datetime.now().strftime('%Y-%m-%d')filename = os.path.join('records'f'{today}.txt')

你甚至可以再配合目录检查:

ifnot os.path.exists('records'):    os.mkdir('records')

这样结果就可以按日期归档。

你会发现,一旦模块和标准库都熟一点,项目扩展会非常自然。 不是重写,而是在现有骨架上继续长功能。

这就是好结构带来的优势。

十五、这章最应该学到的,不是这几个文件,而是“组合能力”

说到底,这一章真正想训练你的,不是背 random.choice() 还是背 datetime.now()

而是让你开始具备一种能力:

把多个知识点自然组合起来,完成一个完整的小工具。

你前面学的东西,其实一直都不是为了分开摆着的。

模块 导入 自定义模块__name__ == '__main__'标准库 文件读写 路径判断 命令行参数 随机 时间

这些东西一旦组合起来,才真正开始形成项目能力。

而“会组合”,恰恰就是很多人从练习阶段走向实战阶段的分水岭。

十六、一个更完整、适合自己敲一遍的版本

下面我把这个小项目整理成一套更完整、适合你自己跟着敲的版本。

file_utils.py

defload_students(filename):    students = []with open(filename, 'r', encoding='utf-8'as f:for line in f:            name = line.strip()if name:                students.append(name)return studentsdefsave_result(filename, content):with open(filename, 'a', encoding='utf-8'as f:        f.write(content + '\n')

picker.py

import randomdefpick_student(students):ifnot students:returnNonereturn random.choice(students)

main.py

import osimport sysfrom datetime import datetimefrom file_utils import load_students, save_resultfrom picker import pick_studentdefmain():if len(sys.argv) < 2:        print('用法:python main.py 名单文件名')return    filename = sys.argv[1]ifnot os.path.exists(filename):        print(f'{filename} 文件不存在,程序结束')return    students = load_students(filename)ifnot students:        print('名单为空,无法抽取')return    winner = pick_student(students)    now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')ifnot os.path.exists('records'):        os.mkdir('records')    result_file = os.path.join('records''result.txt')    result = f'抽中学生:{winner},时间:{now}'    print(result)    save_result(result_file, result)    print(f'结果已保存到 {result_file}')if __name__ == '__main__':    main()

这套代码已经非常值得你亲手敲一遍了。 因为它把这一整个阶段最核心的东西基本都串起来了。

十七、这章结束后,你应该具备的感觉

如果这一章你真的看懂了,那你应该开始有下面这种感觉:

我不是只能写一个文件的脚本了 我开始知道怎么拆模块了 我开始知道主程序入口该怎么写了 我开始知道标准库怎么自然接入项目了 我开始知道代码结构怎么才能更像一个小项目了

这其实已经是很大的进步了。

因为很多人卡了很久,并不是不会语法,而是不会把语法组织成一个完整的小工具。 而这一章,本质上就在帮你过这个坎。

十八、本章小练习

你可以基于这个随机点名工具,再自己做两个升级版练习。

第一个练习:

把“随机抽 1 人”改成“随机抽 3 人”。 这会逼着你思考 random 模块里是不是还有更适合的函数,以及结果怎么保存更合理。

第二个练习:

把结果文件改成按日期命名,比如:

records/2026-03-26.txt

这会逼着你继续练:

datetime.strftime()os.path.join()os.path.exists()os.mkdir()

只要你能把这两个小升级做出来,这一章的内容就算真的落地了。

十九、本章总结

这一章,我们没有再新增很多零碎知识点,而是把模块和标准库真正拼成了一个完整小项目。

你看到了怎么用模块拆分职责。 看到了怎么用自定义模块封装业务逻辑。 看到了怎么用 main() 和 __name__ == '__main__' 组织程序入口。 看到了怎么用 randomdatetimeossys 这些标准库给项目补上真实能力。 也看到了“更像正式项目的代码”到底意味着什么:不是代码有多大,而是结构、边界、职责、复用意识开始变得清楚。

到这里,第九阶段就算正式收束了。 你已经不只是知道模块和标准库是什么,而是开始具备把它们用到真实小工具里的能力。

下一章,我们正式进入第十阶段:091|列表推导式:Pythonic 写法从这里开始

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 06:41:00 HTTP/2.0 GET : https://f.mffb.com.cn/a/500770.html
  2. 运行时间 : 0.212811s [ 吞吐率:4.70req/s ] 内存消耗:4,524.21kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=875004c1f12af1e54f70f6c7c26824f2
  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.000718s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001044s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000366s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000314s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000658s ]
  6. SELECT * FROM `set` [ RunTime:0.000243s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000740s ]
  8. SELECT * FROM `article` WHERE `id` = 500770 LIMIT 1 [ RunTime:0.000534s ]
  9. UPDATE `article` SET `lasttime` = 1783032060 WHERE `id` = 500770 [ RunTime:0.019253s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000355s ]
  11. SELECT * FROM `article` WHERE `id` < 500770 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001152s ]
  12. SELECT * FROM `article` WHERE `id` > 500770 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.008331s ]
  13. SELECT * FROM `article` WHERE `id` < 500770 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.057133s ]
  14. SELECT * FROM `article` WHERE `id` < 500770 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.027639s ]
  15. SELECT * FROM `article` WHERE `id` < 500770 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.026342s ]
0.214476s