当前位置:首页>python>写了多年Python,我最后悔没早点养成这5个习惯

写了多年Python,我最后悔没早点养成这5个习惯

  • 2026-06-27 21:45:05
写了多年Python,我最后悔没早点养成这5个习惯

前几天翻自己多年前写的一个项目,差点没认出来。

没有类型标注,函数参数全靠猜;没有测试,改一行怕崩十行;日志全是print,排查问题靠肉眼扫描;配置硬编码在代码里,换个环境就得改源码;依赖管理一团浆糊,pip install装完不知道哪个版本能跑。

看着那段代码,我只有一个想法:要是早点养成几个习惯,后面能省多少事。

今天聊聊我写Python这些年,最后悔没早点做的5件事。不是什么高深技巧,就是几个习惯。但习惯这东西,早养成一天,后面就少踩一天坑。

往期阅读>>>

Python 为什么会成为AI时代的头部语言

Python 40个常用的列表推导式

Python 50个提高代码开发效率的方法

Python 自动检测服务HTTPS证书过期时间并发送预警

Python 自动化操作Redis的15个实用脚本

Python 自动化管理Jenkins的15个实用脚本,提升效率

Python copyparty搭建轻量的文件服务器的方法

Python 实现2FA认证的方法,提升安全性

Python 封装20个常用API接口,提升开发效率

App2Docker:如何无需编写Dockerfile也可以创建容器镜像

Python 集成 Nacos 配置中心的方法

Python 35个JSON数据处理方法

Python 字典与列表的20个核心技巧

Python 15个文本分析的库,提升效率

Python 15个Pandas技巧,提升数据分析效率

Python 运维中30个常用的库,提升效率

Python调用远程接口的方法

Python 提取HTML文本的方法,提升效率

Python 应用容器化方法:实现“一次部署,处处运行”

Python 自动化识别Nginx配置并导出为excel文件,提升Nginx管理效率

Python 5个常见的异步任务处理框架

Python数据科学常见的30个库

Python 50个实用代码片段,优雅高效


一、写类型标注

我前几年写Python从来不加类型标注。理由很充分:Python是动态类型语言啊,加类型标注不是多此一举吗?

直到有一天,我调用一个同事写的函数:

defprocess_data(dataconfigflag):# 这三个参数分别是什么类型?什么含义?# data是dict还是list?config是字符串还是对象?flag是bool还是int?    ...

我盯着这三个参数看了五分钟,最后翻了半天源码才搞明白。那一刻我突然理解了,类型标注不是给编译器看的,是给人和IDE看的。

加上类型标注之后:

defprocess_data(datalist[dict[strAny]],configProcessingConfig,flagbool = False,->ProcessResult:    ...

一眼就知道传什么、返回什么。IDE能自动补全,mypy能帮你检查类型错误,代码review的时候不用再猜参数含义。

而且类型标注写起来没那么麻烦。简单的函数几秒钟就加完了,复杂函数加标注的过程本身就是梳理逻辑——你写着写着就会发现这个参数到底该传什么,比直接写代码想得更清楚。

我现在写代码的第一步就是加类型标注,不是最后一步。先定义类型,再写逻辑,思路反而更清晰。

# 以前:先写逻辑,类型靠猜defget_users(roleactive):query = db.query(User)ifrole:query = query.filter_by(role=role)ifactive:query = query.filter_by(is_active=True)returnquery.all()# 现在:先定义类型,逻辑跟着类型走defget_users(roleUserRole|None = None,activebool = False,->list[User]:query = db.query(User)ifrole:query = query.filter_by(role=role)ifactive:query = query.filter_by(is_active=True)returnquery.all()

别等以后再加。以后你不会加的,我试过了。


二、写测试,哪怕只写一个

我以前觉得写测试是正经项目才需要做的事,自己写的小工具、内部脚本不用那么讲究。结果就是,每次改代码都提心吊胆——改了A,B会不会挂?不知道,只能手动跑一遍。

后来有个项目上线后出了bug,我改了一行代码,自测没问题,上线后另一个功能崩了。原因是我改的那行影响了一个我没想到的分支。如果有个测试覆盖那个分支,上线前就能发现。

从那以后我给自己定了个规矩:每个新功能至少写一个测试。不是追求覆盖率,就是确保核心逻辑有人守着。

# 业务代码defcalculate_discount(userUserorderOrder->float:ifuser.is_vip:return0.2iforder.total>1000:return0.1return0.0# 对应的测试——就这几行,但核心逻辑都覆盖了deftest_calculate_discount():vip_user = User(is_vip=True)normal_user = User(is_vip=False)big_order = Order(total=1500)small_order = Order(total=500)assertcalculate_discount(vip_userbig_order) == 0.2assertcalculate_discount(vip_usersmall_order) == 0.2assertcalculate_discount(normal_userbig_order) == 0.1assertcalculate_discount(normal_usersmall_order) == 0.0

就这么几行测试,以后改 calculate_discount 的逻辑,跑一下就知道有没有改出问题。

不用追求什么测试驱动开发,不用纠结覆盖率到多少。先写一个测试,哪怕只测最核心的那条路径,也比零测试强一百倍。

我现在的习惯是:写完一个函数,顺手写个测试。不是等有空再补,是写代码的时候一起写。因为一旦代码写完了,你大概率不会再回头补测试——这个我也试过了。


三、用logging,别用print

这个可能是最不起眼但影响最大的一个。

我前几年调试全靠print。开发的时候满屏print,上线前删掉,出了问题再加回来,改完再删……循环往复。更惨的是,有时候删print的时候不小心删了有用的代码,或者忘了删某几个print,线上日志里突然冒出一堆调试信息。

后来有个线上问题,排查的时候我加了一堆print,定位完问题又得一个个删。当时就想:要是这些调试信息能按需开关就好了。

logging就是干这个的:

importlogginglogger = logging.getLogger(__name__)# 开发时看详细信息logger.debug("处理用户请求: user_id=%s, params=%s"user_idparams)# 正常业务日志logger.info("订单创建成功: order_id=%s"order_id)# 需要关注但不致命的问题logger.warning("缓存命中率低于50%%: hit_rate=%.1f"hit_rate)# 出了错,需要排查logger.error("数据库连接失败: host=%s, error=%s"db_hoste)# 严重问题,需要立即处理logger.critical("支付服务不可用,影响所有订单")

关键区别:logging可以按级别控制输出,print要么全输出要么全删。

开发时设 DEBUG 级别,所有日志都看;上线设 INFO 级别,debug日志自动消失,不用删代码;排查问题时临时调到 DEBUG,看完再调回去。

# 开发环境logging.basicConfig(level=logging.DEBUG)# 生产环境logging.basicConfig(level=logging.INFO)

而且logging的格式化比print好用得多。logger.info("用户%s下单成功", user_id) 比 print(f"用户{user_id}下单成功") 多了个好处:如果当前日志级别不输出这条,格式化字符串根本不会执行,省性能。print的f-string每次都会格式化,不管你需不需要。

还有一个很多人忽略的点:logging会自动带上模块名、函数名、时间戳。你不用手动写 print(f"[{datetime.now()}] [order_service] 订单创建成功"),logging一行配置就搞定:

logging.basicConfig(level=logging.INFO,format="%(asctime)s [%(name)s] %(levelname)s: %(message)s",)

输出:

2026-06-05 19:10:31 [my_project.services.order] INFO: 订单创建成功: order_id=12345

从print换到logging,改动不大,但收益是持续的。我现在新项目第一件事就是配logging,print只在临时调试的时候用,调试完就删。


四、配置和代码分开

我早期写代码最喜欢干的事就是把数据库地址、API密钥、超时时间直接写在源码里。

DB_HOST = "192.168.1.100"DB_PORT = 5432API_KEY = "sk-xxxxxxxxxxxx"TIMEOUT = 30

写的时候方便,改的时候痛苦。换个环境就得改源码,改完还得重新部署。更离谱的是有一次,我把包含API密钥的代码推到了公开仓库,还好同事及时发现,不然那个密钥就全网可见了。

后来学乖了,配置一律放环境变量或配置文件,代码里只读取:

frompydantic_settingsimportBaseSettingsclassSettings(BaseSettings):db_hoststr = "localhost"db_portint = 5432api_keystr = ""timeoutint = 30model_config = {"env_file"".env"}settings = Settings()

代码里只写默认值和类型,实际值从 .env 文件读取。.env 不进Git(.gitignore 里加上),给新人一个 .env.example 当模板:

# .env.exampleDB_HOST=localhostDB_PORT=5432API_KEY=your_api_key_hereTIMEOUT=30

这样换环境只改 .env,不动源码;密钥不会进Git;新人clone完复制 .env.example 填上值就能跑。

其实道理很简单:配置是会变的,代码是不该变的。把会变的东西和不该变的东西混在一起,迟早出事。


五、用虚拟环境,从第一个项目开始

我刚开始学Python的时候,所有包直接装在系统Python里。后来装了个Django 2.x的项目,又装了个Django 3.x的项目,版本冲突,两个项目都跑不了。删了重装,装完这个另一个又挂了。

折腾了一下午,最后有人告诉我:用虚拟环境。

python -m venv .venvsource .venv/bin/activate  # Windows: .venv\Scripts\activatepip install django==3.2

每个项目一个独立环境,包版本互不干扰。简单到不行,但我愣是拖了好几个月才开始用。

后来更进了一步,用 pyproject.toml 管依赖:

[project]name = "my-project"version = "0.1.0"dependencies = ["fastapi>=0.100.0","sqlalchemy>=2.0",][project.optional-dependencies]dev = ["pytest>=7.0","ruff","mypy",]

安装就一行:

pip install -e".[dev]"

依赖、版本、开发工具,全在一个文件里管着。比 requirements.txt 省心,比手动pip install靠谱。

虚拟环境这事,没什么技术难度,就是个习惯问题。但这个习惯没养成的时候,你付出的代价是实打实的——版本冲突、环境污染、项目跑不起来,都是因为全局装包。

我现在新建项目的第一步就是创建虚拟环境,不是等项目大了再搞。因为项目永远不会大到需要虚拟环境,而是从一开始就该用。


习惯这东西,越早养成越省事

回头看这5个习惯,每个都不复杂:

  1. 写类型标注 — 函数签名一眼就懂,IDE补全、类型检查都跟上

  2. 写测试 — 至少覆盖核心路径,改代码不用提心吊胆

  3. 用logging — 按级别控制输出,不用反复删print

  4. 配置和代码分开 — 换环境不改源码,密钥不进Git

  5. 用虚拟环境 — 项目间互不干扰,依赖管理有据可查

“无他,惟手熟尔”!有需要的用起来!
------加入知识库与更多人一起学习------

https://ima.qq.com/wiki/?shareId=f2628818f0874da17b71ffa0e5e8408114e7dbad46f1745bbd1cc1365277631c

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 05:24:49 HTTP/2.0 GET : https://f.mffb.com.cn/a/498597.html
  2. 运行时间 : 0.107077s [ 吞吐率:9.34req/s ] 内存消耗:4,697.36kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=6b8b398eefdbc50bbbff805a7fc724e7
  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.000545s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000632s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.001249s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.006268s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000497s ]
  6. SELECT * FROM `set` [ RunTime:0.000802s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000612s ]
  8. SELECT * FROM `article` WHERE `id` = 498597 LIMIT 1 [ RunTime:0.003490s ]
  9. UPDATE `article` SET `lasttime` = 1783027489 WHERE `id` = 498597 [ RunTime:0.015150s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000256s ]
  11. SELECT * FROM `article` WHERE `id` < 498597 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000529s ]
  12. SELECT * FROM `article` WHERE `id` > 498597 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001719s ]
  13. SELECT * FROM `article` WHERE `id` < 498597 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000989s ]
  14. SELECT * FROM `article` WHERE `id` < 498597 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001917s ]
  15. SELECT * FROM `article` WHERE `id` < 498597 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.004108s ]
0.108704s