当前位置:首页>python>Python 20个提升效率的编程技巧

Python 20个提升效率的编程技巧

  • 2026-07-02 08:29:39
Python 20个提升效率的编程技巧

Python写了几年,总有一些技巧是你偶然发现、然后后悔没早点知道的。它们不是那种"教科书第一章"的基础语法,也不是需要读源码才能理解的冷门黑魔法——而是介于两者之间,真正能让你每天少写几十行、少调半小时bug的效率工具。

全部基于标准库和内置语法,不需要安装任何第三方包。

1. f-string不止是插值

大部分人对f-string的认知停留在f"Hello {name}",但实际上f-string能做的不止这些。

数字格式化。你肯定遇到过这种需求:金额显示千分位、百分比对齐、补零。以前要用.format()写一堆格式说明符,现在f-string一行搞定:

amount = 1234567.89success_rate = 0.8732task_id = 42print(f"¥{amount:,.2f}")          # ¥1,234,567.89print(f"成功率:{success_rate:.1%}"# 成功率:87.3%print(f"任务#{task_id:05d}")        # 任务#00042

:,.2f里的,是千分位分隔符,.2f是保留两位小数。:.1%自动乘100并加百分号。:05d补零到5位。比.format()简洁一倍。

还有个容易被忽略的功能——=调试语法。Python 3.8之后,想在打印日志时同时显示变量名和值,以前要写f"x={x}",现在直接用f"{x=}"

x = 3 + 4print(f"{x=}")           # x=7name = "张三"print(f"{name.upper()=}"# name.upper()='张三'

表达式结果、变量名、值全部自动输出,调试时省掉大量手写字符串的时间。

2. zip不只是拉链

zip()最常见的用法是并行迭代两个列表。但它的能力远不止于此。

转置矩阵。*matrix把每行解包为独立参数传给zip,一行完成矩阵转置:

matrix = [    [123],    [456],    [789]]transposed = list(zip(*matrix))print(transposed)  # [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

分组配对——把两个列表做成字典:

keys = ["name""age""city"]values = ["李四"28"深圳"]user = dict(zip(keys, values))print(user)  # {'name': '李四', 'age': 28, 'city': '深圳'}

反向操作——zip配合解包把元组列表拆回独立列表:

pairs = [("A"1), ("B"2), ("C"3)]letters, numbers = zip(*pairs)print(letters)  # ('A', 'B', 'C')print(numbers)  # (1, 2, 3)

注意一个坑:列表长度不一致时,zip会静默截断到最短。用itertools.zip_longest可以填充缺失值:

from itertools import zip_longesta = [1234]b = ["a""b"]for x, y in zip_longest(a, b, fillvalue="缺失"):    print(f"{x} -> {y}")# 1 -> a# 2 -> b# 3 -> 缺失# 4 -> 缺失

3. Counter:统计的终极方案

统计列表里每个元素的出现次数,collections.Counter是最佳选择:

from collections import Counterwords = ["apple""banana""apple""cherry""banana""apple"]count = Counter(words)print(count)            # Counter({'apple': 3, 'banana': 2, 'cherry': 1})print(count.most_common(2))  # [('apple', 3), ('banana', 2)]

Counter之间还能做加减运算:

a = Counter(["a""b""a""c"])b = Counter(["a""b""b""d"])print(a + b)   # Counter({'a': 3, 'b': 3, 'c': 1, 'd': 1})print(a - b)   # Counter({'a': 1, 'c': 1})  # 减到0以下的key会被删除print(a & b)   # Counter({'a': 1, 'b': 1})  # 取交集(最小值)print(a | b)   # Counter({'a': 2, 'b': 2, 'c': 1, 'd': 1})  # 取并集(最大值)

分析日志文件时这四则运算完全是降维打击。比如比较今天和昨天的访问来源差异,today_counter - yesterday_counter一行出结果。

4. 解包的高级玩法

多变量交换不用临时变量:

a, b = b, a

*收集头尾以外的所有元素:

first, *middle, last = [123456]print(first, middle, last)  # 1 [2, 3, 4, 5] 6

嵌套解包处理复杂数据结构:

data = [("张三"28, ("Python""Go")), ("李四"32, ("Java""Rust"))]for name, age, (lang1, lang2) in data:    print(f"{name}{age}岁)主攻{lang1}{lang2}")# 张三(28岁)主攻Python和Go# 李四(32岁)主攻Java和Rust

**合并字典——完美处理"默认配置+用户覆盖"模式:

defaults = {"timeout"30"retries"3}user_config = {"timeout"60"debug"True}merged = {**defaults, **user_config}print(merged)  # {'timeout': 60, 'retries': 3, 'debug': True}

5. any()和all():条件聚合不写循环

any()检查是否有至少一个元素满足条件,用生成器表达式而不是列表——短路求值,不会遍历完整个序列:

logs = ["INFO: 服务启动""WARNING: 内存使用率80%""ERROR: 连接超时""INFO: 请求完成"]has_error = any("ERROR"in line for line in logs)print(has_error)  # Trueall_info = all("INFO"in line for line in logs)print(all_info)   # False

更实用的场景——表单批量验证:

defvalidate_form(data):    checks = [        len(data.get("username""")) >= 3,"@"in data.get("email"""),        data.get("age"0) >= 18,        data.get("password""") != ""    ]ifnot all(checks):        failed = [desc for desc, ok in zip(            ["用户名过短""邮箱格式错误""未满18岁""密码为空"], checks        ) ifnot ok]raise ValueError(f"验证失败: {', '.join(failed)}")returnTrueform = {"username""ab""email""xxx""age"16"password"""}try:    validate_form(form)except ValueError as e:    print(e)  # 验证失败: 用户名过短, 邮箱格式错误, 未满18岁, 密码为空

6. 字典合并运算符 |

Python 3.9引入了||=合并字典,比{**a, **b}更直观:

a = {"x"1"y"2}b = {"y"3"z"4}merged = a | bprint(merged)  # {'x': 1, 'y': 3, 'z': 4}a |= b          # 原地更新

7. 列表切片不止取子序列

翻转序列的最简写法:

text = "Python"print(text[::-1])  # nohtyP

隔位取样:

data = list(range(111))  # [1,2,3,4,5,6,7,8,9,10]print(data[::2])   # [1, 3, 5, 7, 9]  奇数位置print(data[1::2])  # [2, 4, 6, 8, 10] 偶数位置

切片赋值——批量插入、替换、删除:

items = ["a""d""e"]items[1:1] = ["b""c"]  # 在索引1的位置插入print(items)  # ['a', 'b', 'c', 'd', 'e']items[1:3] = ["X""Y""Z"]  # 替换子序列print(items)  # ['a', 'X', 'Y', 'Z', 'd', 'e']items[1:4] = []  # 删除子序列print(items)  # ['a', 'd', 'e']

8. set不只是去重

集合运算做业务分析,比写SQL join快得多:

today_users = {"张三""李四""王五""赵六"}yesterday_users = {"李四""赵六""孙七"}new_users = today_users - yesterday_users           # 新用户lost_users = yesterday_users - today_users          # 流失用户retained = today_users & yesterday_users            # 留存用户all_users = today_users | yesterday_users           # 全部用户symmetric_diff = today_users ^ yesterday_users      # 非重叠用户print(f"新增{len(new_users)}人: {new_users}")          # 新增2人print(f"流失{len(lost_users)}人: {lost_users}")        # 流失1人print(f"留存{len(retained)}人: {retained}")            # 留存2人

一个容易被忽略的事实:set的查找是O(1),列表是O(n)。10万级别的集合运算,Python原生set通常比数据库往返快。

9. 推导式不只是写得更短

字典推导式和集合推导式:

# 翻转kv映射name_to_id = {"张三"101"李四"102"王五"103}id_to_name = {v: k for k, v in name_to_id.items()}print(id_to_name)  # {101: '张三', 102: '李四', 103: '王五'}# 提取所有唯一首字母names = ["Alice""Bob""Charlie""Anna""David"]initials = {name[0for name in names}print(initials)  # {'A', 'B', 'C', 'D'}

带条件的推导式——一行完成过滤+转换:

scores = [85924578605588]pass_scores_squared = [s**2for s in scores if s >= 60]print(pass_scores_squared)  # [7225, 8464, 6084, 3600, 7744]

嵌套推导式注意:两层是上限,超过就老老实实写for循环。

10. sorted()的key参数

key参数可以接收任意函数来自定义排序逻辑:

words = ["watermelon""apple""banana""kiwi""grape"]sorted_words = sorted(words, key=len)print(sorted_words)  # ['kiwi', 'apple', 'grape', 'banana', 'watermelon']

operator模块的itemgetter比lambda更快:

from operator import itemgetterusers = [    {"name""张三""score"85},    {"name""李四""score"92},    {"name""王五""score"78},]sorted_users = sorted(users, key=itemgetter("score"), reverse=True)print([u["name"for u in sorted_users])  # ['李四', '张三', '王五']# 多级排序:元组逐元素比较sorted_users = sorted(users, key=lambda u: (-u["score"], u["name"]))

11. 生成器表达式:省内存的懒人武器

列表推导式返回整个列表,生成器表达式返回惰性迭代器,几乎不占额外内存:

# 列表推导:一次性生成1000万个整数 → 约80MB内存# nums_list = [i**2 for i in range(10_000_000)]# 生成器:按需产生squares = (i**2for i in range(10_000_000))print(next(squares))  # 0print(next(squares))  # 1

管道式处理——每个环节都是生成器,内存占用恒定:

from collections import Counterdefread_lines(filename):with open(filename, encoding="utf-8"as f:for line in f:yield line.strip()deffilter_errors(lines):for line in lines:if"ERROR"in line:yield linedefextract_ips(error_lines):import refor line in error_lines:        match = re.search(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", line)if match:yield match.group()# 管道串联:每步惰性计算,即使日志文件几百MB,内存也不变lines = read_lines("server.log")errors = filter_errors(lines)ips = extract_ips(errors)top_ips = Counter(ips).most_common(10)

12. @lru_cache:函数结果自动缓存

functools.lru_cache让函数记住之前的计算结果——暴力递归变记忆化DP,代码零改动:

from functools import lru_cache@lru_cache(maxsize=128)deffibonacci(n):if n < 2:return nreturn fibonacci(n - 1) + fibonacci(n - 2)print(fibonacci(35))  # 9227465,第一次约0.5秒print(fibonacci(35))  # 第二次瞬间完成print(fibonacci.cache_info())# CacheInfo(hits=33, misses=36, maxsize=128, currsize=36)

真实业务场景——缓存配置中心查询,避免重复网络请求:

from functools import lru_cache@lru_cache(maxsize=16)defget_db_config(db_name: str):"""从配置中心拉取数据库连接信息"""import time    time.sleep(0.5)  # 模拟网络延迟return {"host"f"{db_name}-master.internal""port"5432}config1 = get_db_config("orders")  # 0.5秒config2 = get_db_config("orders")  # 0秒,命中缓存

注意:被装饰的函数参数必须是可哈希的(列表不行),原始数据频繁变化时不适合用。

13. Pathlib:告别os.path的混乱

os.path函数嵌套的写法可读性差,pathlib链式调用,语义清晰:

from pathlib import Path# 路径拼接直接用 / 运算符dir_path = Path.home() / "projects" / "data"dir_path.mkdir(parents=True, exist_ok=True)file_path = dir_path / "result.csv"basename = file_path.stem              # 不用写os.path函数# 一次性读写content = file_path.read_text(encoding="utf-8")file_path.write_text("新内容", encoding="utf-8")# 遍历目录for csv_file in dir_path.glob("*.csv"):    print(csv_file.name)# 递归搜索all_md = list(dir_path.rglob("*.md"))

14. try/except/else/finally的完整语义

else只在try没有抛出异常时执行——把"成功才做的逻辑"和"可能失败的操作"精确分离:

defprocess_file(path):    file = Nonetry:        file = open(path, "r")except FileNotFoundError:        print(f"文件不存在: {path}")returnNoneexcept PermissionError:        print(f"无权限读取: {path}")returnNoneelse:# 只在打开成功后才执行        content = file.read()return len(content)finally:# 无论如何都执行——资源清理放这里最安全if file:            file.close()

多个上下文管理器可以用ExitStack避免嵌套地狱:

from contextlib import ExitStackdefprocess_multiple_files(filenames):with ExitStack() as stack:        files = []for name in filenames:try:                f = stack.enter_context(open(name))                files.append(f)except FileNotFoundError:                print(f"跳过缺失文件: {name}")return [f.readline().strip() for f in files]

15. walrus运算符:在条件中赋值

海象运算符(:=)在推导式中复用计算结果,避免重复调用昂贵函数:

# 不使用walrus:get_user_score被调了两次top_users = [    user["name"]for user in all_usersif get_user_score(user["id"]) > 90and get_user_score(user["id"]) < 100]# 使用walrus:一次调用,结果复用top_users = [    namefor user in all_usersif (score := get_user_score(user["id"])) > 90and score < 100and (name := user["name"])]

while循环中同时读取和判断:

import requestsdeffetch_all(url_template):    result = []    page = 1while (resp := requests.get(url_template.format(page), timeout=10)).ok and resp.json():        result.extend(resp.json())        page += 1return result

16. partial:函数参数预填充

functools.partial把函数的部分参数提前"冻结",生成专用函数:

from functools import partialdefsend_notification(user, message, urgency="normal", channel="email"):    print(f"[{urgency.upper()}] 通过{channel}发给{user}{message}")send_urgent = partial(send_notification, urgency="critical")send_sms = partial(send_notification, channel="sms", urgency="normal")send_urgent("张三""服务器CPU 99%")    # [CRITICAL] 通过email发给张三: ...send_sms("李四""验证码: 123456")      # [NORMAL] 通过sms发给李四: ...

GUI回调场景里partial特别有用——传参数给callback但不能加括号,partial刚好解决:

defon_click(button_name, event):    print(f"用户点击了{button_name}")save_callback = partial(on_click, "保存按钮")cancel_callback = partial(on_click, "取消按钮")

17. str方法比你以为的强

startswithendswith可以接收元组,一次检查多个前缀:

log_line = "ERROR: 数据库连接超时"if log_line.startswith(("ERROR""FATAL""CRITICAL")):    print(f"严重日志: {log_line}")defis_code_file(filename):return filename.endswith((".py"".js"".ts"".go"".rs"))

removeprefixremovesuffix(Python 3.9+)只移除真正的前缀/后缀,不影响中间内容,比replace安全:

tricky = ".gz.tar.gz"print(tricky.removesuffix(".gz"))     # .gz.tar    ← 正确print(tricky.replace(".gz"""))     # .tar        ← 错了!把中间的.gz也删了

translate配合maketrans做批量字符替换,比多次replace快得多:

trans = str.maketrans({"'""''""\\""\\\\"'"''\\"'})dangerous = "O'Brien's \"data\"\\path"safe = dangerous.translate(trans)print(safe)  # O''Brien''s \"data\"\\path

18. itertools高级组合

product——笛卡尔积,测试用例生成神器:

from itertools import productbrowsers = ["Chrome""Firefox""Safari"]os_list = ["Windows""Mac""Linux"]resolutions = ["1920x1080""1366x768"]test_cases = list(product(browsers, os_list, resolutions))print(len(test_cases))  # 18 种组合

combinations——做A/B测试分组:

from itertools import combinationsfeatures = ["大按钮""红色边框""动态动画""倒计时文案"]for combo in combinations(features, 3):    print(combo)

chain——平铺多个可迭代对象,避免嵌套循环:

from itertools import chainactive = ["张三""李四"]inactive = ["王五"]pending = ["赵六"]all_users = list(chain(active, inactive, pending))print(all_users)  # ['张三', '李四', '王五', '赵六']# 平铺嵌套列表nested = [["a""b"], ["c"], ["d""e""f"]]flat = list(chain.from_iterable(nested))print(flat)  # ['a', 'b', 'c', 'd', 'e', 'f']

19. 自定义上下文管理器

@contextmanager装饰器让你几行代码写出自己的with逻辑:

import timefrom contextlib import contextmanager@contextmanagerdeftimer(description: str):    start = time.perf_counter()yield    elapsed = time.perf_counter() - start    print(f"{description}{elapsed:.3f}秒")with timer("数据处理"):    data = [i**2for i in range(5_000_000)]# 输出: 数据处理: 0.237秒

临时切换工作目录——进入with块自动切过去,退出自动还原:

import osfrom pathlib import Pathfrom contextlib import contextmanager@contextmanagerdefwork_in(path):    old = os.getcwd()    os.chdir(path)try:yieldfinally:        os.chdir(old)with work_in("/tmp"):    Path("test.txt").write_text("临时文件")# 出了with块,自动回到原目录

20. enum:别再用字符串常量了

代码里散落着status = "active"if status == "canceled"这种魔法字符串——拼错一个字母,bug就藏在运行时。enum让常量变得类型安全:

from enum import Enum, autoclassOrderStatus(Enum):    PENDING = auto()    CONFIRMED = auto()    SHIPPED = auto()    DELIVERED = auto()    CANCELED = auto()defprocess_order(order_id: str, status: OrderStatus):if status == OrderStatus.CANCELED:        print(f"订单{order_id}已取消,启动退款流程")elif status == OrderStatus.DELIVERED:        print(f"订单{order_id}已签收,启动评价提醒")else:        print(f"订单{order_id}状态: {status.name}")process_order("ORD-10001", OrderStatus.SHIPPED)# 可以从名字或值还原status = OrderStatus["CANCELED"]     # 按名字取status = OrderStatus(3)              # 按值取,得到SHIPPED

一个好的工程实践:一旦一个字符串常量会在三个以上地方出现,就应该用enum替代。三个月后回来改代码的你自己也会感谢你。


标准库比你想象的要强大得多——很多时候你以为需要装第三方包的问题,collectionsitertoolsfunctoolspathlib已经帮你搞定了。关键在于:知道它们的存在,并且在合适的场景下用出来。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 01:03:11 HTTP/2.0 GET : https://f.mffb.com.cn/a/502333.html
  2. 运行时间 : 0.301286s [ 吞吐率:3.32req/s ] 内存消耗:4,622.88kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=2288dfd7322bb802b5d39ddd677b7644
  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.001248s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001876s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.005102s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.003528s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001797s ]
  6. SELECT * FROM `set` [ RunTime:0.008308s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001907s ]
  8. SELECT * FROM `article` WHERE `id` = 502333 LIMIT 1 [ RunTime:0.007279s ]
  9. UPDATE `article` SET `lasttime` = 1783011791 WHERE `id` = 502333 [ RunTime:0.056897s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000830s ]
  11. SELECT * FROM `article` WHERE `id` < 502333 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001555s ]
  12. SELECT * FROM `article` WHERE `id` > 502333 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001388s ]
  13. SELECT * FROM `article` WHERE `id` < 502333 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.058180s ]
  14. SELECT * FROM `article` WHERE `id` < 502333 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.012477s ]
  15. SELECT * FROM `article` WHERE `id` < 502333 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.038753s ]
0.307664s