当前位置:首页>python>《Python 从入门到精通》059|把复杂问题拆成函数,是编程进阶的第一步

《Python 从入门到精通》059|把复杂问题拆成函数,是编程进阶的第一步

  • 2026-07-02 18:30:29
《Python 从入门到精通》059|把复杂问题拆成函数,是编程进阶的第一步

前面你已经学了函数定义、参数、返回值、作用域、递归。 如果只从语法层面看,函数这件事好像已经差不多了。

可真正一写程序,你很快会发现一个更现实的问题:

我知道函数怎么写 但我还是不知道,什么时候该拆函数 更不知道,一段代码到底该拆成几个函数才合适

这才是函数阶段真正的分水岭。

很多人学函数时,前半段学的是语法。 而从这一章开始,学的就是思路。

说得更直白一点:

函数不是为了把代码切碎 而是为了把问题拆清楚

你能不能把一个复杂问题拆成几个小步骤, 并且让每个小步骤都有明确职责, 这件事,往往比你会不会某个函数语法更重要。

所以这一章,我们就专门讲一件事:

把复杂问题拆成函数,为什么是编程进阶的第一步

一、为什么很多人会写代码,却写不出像样的程序

这个现象特别普遍。

前面学了变量、判断、循环、字符串、列表、字典、函数。 单个知识点都懂。 小练习也能写。 但只要题目稍微长一点、步骤稍微多一点,就开始乱。

为什么?

不是基础语法不会。 而是脑子里没有 拆 的意识。

比如一个很简单的需求:

输入学生姓名和三门成绩 计算总分 计算平均分 判断是否及格 最后把结果整齐打印出来

很多新手会下意识一口气从上往下写:

name = '张三'chinese = 90math = 95english = 88total = chinese + math + englishavg = total / 3if avg >= 60:    result = '及格'else:    result = '不及格'print(f'姓名:{name}')print(f'总分:{total}')print(f'平均分:{avg:.1f}')print(f'结果:{result}')

这段代码当然能跑。 问题是,它只能解决眼前这一小次。

如果再来一个学生,你可能继续复制一份。 再来十个学生,代码立刻开始发胖。 再加一个输出格式变化,立刻到处改。

这就说明一个问题:

你写出来的是一次性代码 不是可复用、可扩展、可维护的程序结构

而把复杂问题拆成函数,恰恰就是从 一次性代码 走向 程序结构 的开始。

二、复杂问题最可怕的,不是难,而是糊在一起

很多问题单看都不难。

计算总分,不难。 算平均分,不难。 判断及格,不难。 打印结果,也不难。

可一旦把它们全糊在一起,脑子就开始吃力。

因为你得同时盯住:

输入是谁 处理中间变量怎么流动 总分在哪里算 平均分在哪里算 及格规则写在哪 输出格式是不是统一

你会发现,问题不是某一步不会。 而是所有步骤同时出现在眼前,导致你根本分不出主次。

这就像收拾房间。

如果所有东西都扔在地上,你会觉得房间很乱。 但如果你把书归书,衣服归衣服,杂物归杂物,房间本身并没有变小,只是你开始看清结构了。

函数拆分做的,也是同样的事。

它不是把问题变没。 而是把糊成一团的问题,拆成几个清楚的小块。

三、函数拆分,本质上是在回答三个问题

以后你一旦想拆函数,可以先问自己三个问题。

这一段代码到底在做什么 这件事能不能单独起个名字 它以后会不会重复出现,或者值得单独维护

比如刚才那个学生成绩例子,其实天然就能拆出几个动作:

算总分 算平均分 判断是否及格 打印学生成绩报告

你会发现,只要你能把动作说清楚,函数名通常就已经呼之欲出了。

比如:

get_total_score()get_average_score()is_pass()print_report()

这时候,函数就不是为了形式上切成几段, 而是因为这些动作本来就应该独立存在。

所以真正好的函数拆分,不是随便切几刀。 而是让每个小函数都在回答一句明确的话:

我到底负责哪件事

四、先看一个没拆函数的版本,到底哪里别扭

我们还是用学生成绩这个例子。

name = '张三'chinese = 90math = 95english = 88total = chinese + math + englishavg = total / 3if avg >= 60:    result = '及格'else:    result = '不及格'print(f'姓名:{name}')print(f'总分:{total}')print(f'平均分:{avg:.1f}')print(f'结果:{result}')

这段代码最大的问题,不是错。 而是它把四件不同的事写在了一条直线上:

数据准备 成绩计算 规则判断 结果展示

你以后只要看到一段代码同时承担了好几种不同职责,就要开始警惕:

这里很可能已经值得拆函数了

因为代码一旦职责混杂,后面一定越来越难改。

五、把它拆开之后,会发生什么变化

我们先试着拆成几个函数:

defget_total_score(chinese, math, english):return chinese + math + englishdefget_average_score(total):return total / 3defis_pass(avg):return avg >= 60defprint_report(name, total, avg, passed):    print(f'姓名:{name}')    print(f'总分:{total}')    print(f'平均分:{avg:.1f}')if passed:        print('结果:及格')else:        print('结果:不及格')name = '张三'chinese = 90math = 95english = 88total = get_total_score(chinese, math, english)avg = get_average_score(total)passed = is_pass(avg)print_report(name, total, avg, passed)

你会发现,这段代码一下清爽很多。

主流程只剩下几句特别清楚的话:

先算总分 再算平均分 再判断是否及格 最后打印报告

这就是拆函数最直接的价值:

让主流程像目录 让细节逻辑躲到函数里

这时你再看程序,脑子里不会只有一堆细节变量, 而是开始看到结构了。

六、这时候程序最大的变化,不是更短,而是更清楚

很多人一提函数拆分,总是先问:

这样拆完,代码是不是更短了

不一定。

有时候拆完之后,总代码行数甚至还会更多一点。 但这不是重点。

真正重要的是:

你读代码时更轻松了 你改代码时更容易了 你复用代码时更自然了 你排错时更容易定位了

这才是函数拆分真正值钱的地方。

所以你要慢慢建立一个新的判断标准:

不是只看代码短不短 而是看职责清不清楚,结构顺不顺眼

这是初学者走向进阶时特别重要的一次思维切换。

七、拆函数最核心的原则,不是拆得多,而是拆得对

这一点特别关键。

有些人学会函数之后,会进入另一个极端:

什么都想拆 一行代码也拆 一个判断也拆 结果程序被切得稀碎,看起来反而更累

比如下面这种就有点过头:

defadd(a, b):return a + bdefdivide_by_three(x):return x / 3defcheck_score(x):return x >= 60

如果只是一个特别简单的练习题,这样拆得太细,就会让代码显得支离破碎。

所以函数拆分不是越多越好。 更好的原则应该是:

一个函数,负责一件相对完整、相对独立的事

既不要把五六件事糊在一个函数里。 也不要把一个完整动作硬拆成十个牙签一样的小函数。

你以后写函数时,要慢慢找这个平衡感。

八、什么叫“一件相对完整的事”

这个问题特别值得想一想。

比如:

计算总分 这就是一件完整的事

判断是否及格 这也是一件完整的事

清洗一条原始文本记录 这也是一件完整的事

打印一份学生成绩报告 也算一件完整的事

但像:

把两个数相加后再立刻在外面拿去继续做别的计算 如果只是偶尔一次,可能就没必要非拆成函数

所以什么叫完整,不是按代码行数算, 而是看这个动作本身有没有独立意义。

只要这个动作你能清楚地用一句话说出来, 并且它有可能被反复使用,或者值得单独维护, 那它通常就有函数化的价值。

九、把复杂问题拆成函数,最先提升的是可读性

很多人第一次真正感受到函数拆分的好处,往往不是写的时候,而是回头读的时候。

你自己过两天再看一段没拆函数的代码, 很容易想:

我当时到底在干嘛

但如果主流程长这样:

data = clean_text(raw_text)scores = parse_scores(data)avg = get_average(scores)result = is_pass(avg)print_report(name, avg, result)

你是不是一眼就能大概看懂程序在做什么。

这就是函数拆分带来的可读性优势。

每个函数名本身就是一块说明牌。 你不需要重新钻进细节,就能先看懂程序主线。

对自己如此。 对别人接手代码,更是如此。

所以函数拆分,说到底也是在给代码加标识、加路标、加层次。

十、函数拆分还能显著提升可修改性

我们继续看学生成绩那个例子。

如果你后来想把及格规则从 平均分大于等于 60 改成:

三门都不能低于 60,而且平均分大于等于 60

如果没拆函数,你可能得去一长段代码里翻逻辑。 可如果你已经单独写了:

defis_pass(...):    ...

那你只改这一处就够了。

再比如,如果报告格式以后变了, 你只改 print_report()

这就是函数拆分在项目里特别值钱的地方:

改动范围更小 影响边界更清楚 不容易牵一发动全身

很多人代码写着写着越来越怕改, 不是因为业务复杂得离谱, 而是因为逻辑全缠在一起,一改就怕崩。

函数拆分,正是在帮你降低这种恐惧。

十一、一个非常典型的文本处理例子,特别适合练拆函数

比如现在有这样一条原始数据:

raw_text = '  张三 , 90 , 95 , 88  '

你的目标是:

先清洗掉多余空格 再拆成字段 再转成分数 再计算平均分 最后输出结果

如果你一股脑写下去,当然也能做。 但更清楚的拆法通常是:

defclean_text(text):return text.strip()defsplit_text(text):    parts = text.split(',')    result = []for item in parts:        result.append(item.strip())return resultdefparse_scores(parts):    name = parts[0]    scores = [int(parts[1]), int(parts[2]), int(parts[3])]return name, scoresdefget_average(scores):return sum(scores) / len(scores)defprint_result(name, avg):    print(f'{name} 的平均分是 {avg:.1f}')raw_text = '  张三 , 90 , 95 , 88  'text = clean_text(raw_text)parts = split_text(text)name, scores = parse_scores(parts)avg = get_average(scores)print_result(name, avg)

这段代码最大的优点是:

每一步都很清楚 每个函数职责都很单纯 以后哪一环改动,都比较容易定位

你会发现,函数拆分最适合训练你处理这种多步骤问题。

十二、真正的编程进阶,往往不是学更炫的语法,而是学会拆问题

很多人以为进阶就是:

学更高级的库 学更复杂的语法 学更短的写法 学更花的技巧

这些当然有价值。 但从编程能力的成长路径看,真正很关键的一步,往往是:

你能不能把一个问题拆开

因为再复杂的程序,说到底也是一堆小问题的组合。 不会拆问题的人,看到题目只会觉得乱。 会拆问题的人,会先把大任务分解成几个小功能。

而函数,就是你开始练这种能力时最直接的抓手。

所以这一章的主题看起来像是在讲函数。 但更深一层,其实是在讲:

问题分解能力

这才是真正的进阶起点。

十三、你以后一看到这些信号,就该开始想拆函数了

这里给你几个特别实用的判断信号。

第一种,代码明显开始重复了。 比如一样的几步逻辑在不同地方反复出现。 这时候大概率值得抽函数。

第二种,一段代码同时在做多件不同性质的事。 比如既在清洗数据,又在判断规则,还在负责打印输出。 这通常值得拆。

第三种,一段代码你很难用一句话说清楚它在干嘛。 这往往说明它职责太杂了。

第四种,你已经预感到以后这里会改。 那越早拆函数,后面越轻松。

第五种,主流程开始越来越长,看起来像一条没有段落的长作文。 这时候就该考虑把细节步骤抽走,让主流程只保留骨架。

这些信号你现在就要开始培养敏感度。 以后它们会非常有用。

十四、但不是所有代码都值得立刻抽函数

这一点也很重要。

如果你只是写一两行临时逻辑, 或者一个动作只出现一次,而且特别简单, 那完全没必要为了抽函数而抽函数。

比如:

x = 3y = 5print(x + y)

这就没必要硬抽一个 add() 函数。 因为这段逻辑太短、太直接,也没有明显复用价值。

所以函数拆分不是教条。 不是看见三行代码就条件反射开拆。

更好的思路是:

一旦复杂度、重复度、修改成本开始上升,函数拆分的价值就会越来越明显。

你以后写代码,要学的是判断时机, 不是机械套模板。

十五、函数拆分最常见的三个错误方向

第一种,根本不拆。

所有逻辑从头写到尾, 结果代码变成大段流水账。 这是最常见的问题。

第二种,拆得过碎。

一点点逻辑就拆成一个函数, 结果主流程像在看目录树,读起来反而很累。

第三种,拆了但职责还是混乱。

比如一个函数既负责清洗数据,又负责打印结果,又负责保存文件。 表面看是函数,实际还是把很多事糊在一起。

所以真正好的函数拆分,不是有函数就行。 而是:

拆得有边界 拆得有层次 拆得能让主流程更清楚

这才是关键。

十六、一个很实用的经验:主流程尽量像目录,细节藏进函数

这句话你以后可以反复拿出来用。

比如下面这种主流程:

text = clean_text(raw_text)data = parse_data(text)result = calculate_result(data)print_report(result)

是不是很像目录。

你哪怕不看函数内部, 也大概知道程序先做什么,再做什么。

这就是函数拆分特别理想的一种状态:

主流程负责告诉你 程序在做哪几步 具体细节则藏在函数里面

这会让程序既有概览,又有细节。 既不至于全是抽象壳子,也不至于全是铺开的杂乱操作。

很多写得舒服的程序,都是这种结构。

十七、你现在就该练一种能力:把大需求翻译成函数清单

比如看到题目:

做一个简单的学生成绩处理程序

你脑子里可以开始列函数清单:

输入数据 清洗数据 计算总分 计算平均分 判断是否及格 输出报告

再比如看到题目:

做一个文本清洗小工具

你脑子里可以想:

去掉两边空格 统一分隔符 拆分字段 转成结构化数据 打印结果

这个能力非常关键。

因为很多人写程序卡住,不是不会某个知识点。 而是题目拿到手后,不知道第一步该做什么、第二步该做什么。

而函数拆分,本质上就是在训练你先把步骤列清楚。

十八、一个更像项目的小例子:订单处理程序怎么拆

假设你要写一个简单订单处理逻辑:

商品单价 购买数量 折扣 最后输出订单摘要

你可以直接一口气写完。 但如果要练函数拆分,更清楚的结构可能是:

defget_total(price, count):return price * countdefapply_discount(total, discount):return total * discountdefprint_order(price, count, discount, final_total):    print(f'单价:{price}')    print(f'数量:{count}')    print(f'折扣:{discount}')    print(f'应付:{final_total:.2f}')

主流程:

price = 100count = 3discount = 0.8total = get_total(price, count)final_total = apply_discount(total, discount)print_order(price, count, discount, final_total)

你会发现,这种结构特别清楚。

计算归计算 折扣归折扣 展示归展示

以后如果折扣规则改了,你只动一个函数。 如果打印格式变了,也只动一个函数。

这就是函数拆分真正对程序结构产生作用的地方。

十九、函数拆分也在帮你建立“模块感”

虽然你现在还在函数阶段, 但其实已经在悄悄接近后面更大的概念了。

函数拆分本质上是在训练你:

把大系统切成小模块

现在你拆的是几个函数。 以后你会拆成几个类、几个文件、几个模块、几个子系统。

所以函数拆分并不是一个局部小技巧。 它其实是在训练你更大层面的组织能力。

你现在每次认真地把一个复杂问题拆成几个函数, 其实都是在为后面写更正式的项目打地基。

二十、这一章最该记住的一句话

如果让我把整章压成一句话,那就是:

把复杂问题拆成多个职责清晰的小函数,是你从会写代码走向会组织程序的第一步

这一步真的非常关键。

因为前面的很多基础知识,更多是在教你怎么写单个动作。 而这一章开始,是在教你怎么把多个动作组织成一套结构。

这正是编程能力开始拉开差距的地方。

二十一、练习题:这一章特别适合做“拆分练习”

这一章我特别建议你不要只写代码, 还要练 先拆步骤 再写函数。

下面这些题,你可以先自己列函数清单,再动手。

1. 学生成绩处理

需求:

输入姓名和三门成绩 计算总分 计算平均分 判断是否及格 输出报告

你可以先想: 要不要拆成 get_total()get_average()is_pass()print_report()

2. 文本清洗

需求:

去掉两边空格 按逗号拆分 去掉每个字段两边空格 最后输出整洁结果

你可以先想: 要不要拆成 clean_text()split_text()format_result()

3. 商品订单处理

需求:

计算原价总额 计算折后总额 打印订单摘要

你可以先想: 要不要拆成 get_total()apply_discount()print_order()

这些练习最重要的,不是写出最短代码。 而是训练自己把步骤拆清楚。

二十二、本章小结

这一章最重要的,不是又多学了一个语法点。 而是你开始真正接触到编程进阶的核心能力了:

问题拆解能力

你要记住:

复杂问题之所以让人发懵,很多时候不是因为某一步太难, 而是因为太多步骤糊在一起。 函数拆分的价值,不只是复用代码,更是在帮你整理结构、明确职责、降低修改成本、提高可读性。

一个好的函数拆分,通常会让程序出现两个明显变化:

主流程更清楚 细节职责更独立

从这一章开始,你写函数不该再只是想着 这个语法怎么写, 而要开始想着:

这一步是不是一个完整动作 它值不值得单独起个名字 这个问题能不能拆成几个更清楚的小功能

这一步,就是编程真正开始进阶的信号。

下一章我们继续讲 函数综合案例:写出结构清晰的程序。 到那一章,我们会把前面这些函数定义、参数、返回值、作用域、递归、拆分思路,真正放进完整案例里,让你看到:结构清晰的程序,到底是怎么一步步写出来的。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 06:44:46 HTTP/2.0 GET : https://f.mffb.com.cn/a/494873.html
  2. 运行时间 : 0.093550s [ 吞吐率:10.69req/s ] 内存消耗:4,733.70kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=6426b2259b44f45bc68ba996bc3d6f80
  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.000570s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000794s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.001762s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000270s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000482s ]
  6. SELECT * FROM `set` [ RunTime:0.000209s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000557s ]
  8. SELECT * FROM `article` WHERE `id` = 494873 LIMIT 1 [ RunTime:0.000460s ]
  9. UPDATE `article` SET `lasttime` = 1783032286 WHERE `id` = 494873 [ RunTime:0.010048s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000290s ]
  11. SELECT * FROM `article` WHERE `id` < 494873 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000459s ]
  12. SELECT * FROM `article` WHERE `id` > 494873 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000395s ]
  13. SELECT * FROM `article` WHERE `id` < 494873 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.006049s ]
  14. SELECT * FROM `article` WHERE `id` < 494873 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002105s ]
  15. SELECT * FROM `article` WHERE `id` < 494873 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001681s ]
0.095243s