当前位置:首页>python>Python装饰器在量化交易中的实战:让代码从"能用"到"优雅"

Python装饰器在量化交易中的实战:让代码从"能用"到"优雅"

  • 2026-04-16 03:37:30
Python装饰器在量化交易中的实战:让代码从"能用"到"优雅"

 Python装饰器在量化交易中的实战:让代码从"能用"到"优雅"

 文 | 程飞  |  2026年4月11日


 我最早写量化策略的时候,代码是这样的:函数内部直接写log,函数内部直接加try-except,函数内部直接判断是否交易时段。一个策略三四十行代码,倒有一半是在处理"非策略逻辑"——日志记录、异常捕获、权限校验、性能计时。

 后来策略多了,代码库大了,问题就来了:日志格式不统一,异常处理逻辑分散在几十个函数里,新来的实习生不知道哪些函数有交易时段限制,到处都是重复的try-except。

 解决这个问题的方式,是重新学一遍Python装饰器和设计模式。这听起来像是在"追技术时髦",但实际上我是被真实痛点逼着去学的,学完之后我敢说:装饰器和设计模式,是量化工程师写出工业级代码最重要的两把钥匙。

 一、装饰器是什么:量化老司机的直觉解释

 先说一个非技术的比喻。我每天早上七点半打开交易终端,第一件事不是看行情,是先检查网络是否连通、风控服务是否在线、交易时段是否已经开始。这三件事,不管我当天做什么策略,都要先做一遍。

 装饰器在代码里的作用,跟我每天早上这套检查流程是一样的:它在不改变核心逻辑(策略执行)的情况下,给函数附加一套通用的"前置检查"和"后置处理"。

 Python装饰器的语法很简单,但背后的思想很深刻。它的核心是:高阶函数——接收一个函数作为输入,返回一个增强后的新函数。这个新函数在调用原始函数的前后,可以自由地插入任何额外的逻辑。

 在量化场景里,这个机制的价值是巨大的:你想给十个不同的策略函数统一加上"日志记录"吗?写一个@log_execution装饰器,应用到每个函数上,代码简洁,逻辑统一。你想给所有交易函数统一加上"风控前置检查"吗?一个@risk_check装饰器全搞定。

 二、实战一:用装饰器实现统一的风控前置检查

 这是我用的最多的一个装饰器。每一个下单函数在下单之前,都需要确认:当前是否在交易时段、账户保证金是否足够、当日亏损是否已经达到风控线。不用装饰器的话,这三个检查要写在每一个下单函数内部,重复三遍,维护成本极高。

 

import time
from functools import wraps

def risk_check(func):
   """下单前风控检查装饰器"""
   @wraps(func)
   def wrapper(self, *args, **kwargs):
       # 检查1:交易时段
       if not self.is_trading_hour():
           raise RuntimeError(f"非交易时段,当前时间:{time.strftime('%H:%M:%S')}")
       
       # 检查2:保证金充足
       available = self.get_available_margin()
       required = kwargs.get('required_margin', 0)
       if available < required:
           raise RuntimeError(f"保证金不足,可用:{available},需要:{required}")
       
       # 检查3:当日亏损上限
       today_pnl = self.get_today_pnl()
       if today_pnl < -self.max_daily_loss:
           raise RuntimeError(f"已达当日最大亏损{self.max_daily_loss},当前亏损:{today_pnl}")
       
       return func(self, *args, **kwargs)
   return wrapper
 

 使用方法超级简单,只需要在任何下单函数前面加一个@risk_check:

 

class MomentumStrategy:
   def __init__(self):
       self.max_daily_loss = 50000  # 当日最大亏损
   
   @risk_check
   def place_order(self, symbol, volume, price):
       # 真正的下单逻辑在这里
       print(f"下单成功:{symbol} {volume}手 @{price}")
       return {"status": "success", "order_id": self.generate_order_id()}
 

 一个@risk_check装饰器,给所有下单函数统一加了风控检查,代码简洁,逻辑集中,维护起来极其方便。哪天风控规则改了,改一个装饰器,所有函数自动生效。

 三、实战二:用装饰器实现策略性能计时与日志

 量化策略的性能分析很重要——一个因子计算函数跑了一分钟还是十秒,对实盘影响巨大。我以前是手动在每个函数开头记时间、结尾打印耗时,后来函数多了,根本管不过来。

 用装饰器统一做这件事,是真正把"非功能需求"和"业务逻辑"分开的好例子。业务逻辑只管计算因子,日志和计时全部由装饰器处理。

 

import time
import logging
from functools import wraps

logger = logging.getLogger('quant.performance')

def timing(func):
   """性能计时装饰器,输出函数名和执行时长"""
   @wraps(func)
   def wrapper(*args, **kwargs):
       start = time.perf_counter()
       result = func(*args, **kwargs)
       elapsed = time.perf_counter() - start
       
       # 超过1秒的函数记录warning级别
       level = logging.WARNING if elapsed > 1.0 else logging.DEBUG
       logger.log(level, f"[{func.__name__}] 执行耗时: {elapsed:.3f}秒")
       
       return result
   return wrapper
 

 这个装饰器的价值不只是记录时间,它还能帮你发现性能瓶颈:跑一个月下来,汇总所有函数耗时,你就知道哪个因子计算拖慢了整个策略,哪个数据获取函数需要优化。

 四、实战三:用策略模式重构多策略调度

 装饰器解决的是横切关注点问题,设计模式解决的是代码结构问题。我现在同时运行三个量化策略:一个是趋势跟踪,一个是均值回归,一个是统计套利。三个策略有大量相似的逻辑——获取行情、计算信号、下单执行、记录持仓。但细节各不相同。

 策略模式(Strategy Pattern)的核心思想是:把一类行为(策略)的"算法实现"封装成一个对象,然后让调用者只依赖"策略接口",不依赖具体实现。这样换策略的时候,不需要改调用者代码,只要换策略对象就行了。

 在量化场景里,这个模式的价值非常直接:你的主循环不需要知道当前运行的是趋势策略还是套利策略,它只需要调用strategy.generate_signals(price_data),至于这个方法内部是怎么算的,主循环不关心。

 

from abc import ABC, abstractmethod

class Strategy(ABC):
   """策略基类(抽象接口)"""
   
   @abstractmethod
   def generate_signals(self, price_data: dict) -> list:
       """生成交易信号,子类必须实现"""
       pass
   
   @abstractmethod
   def get_position_size(self, signal: dict, price: float) -> int:
       """计算仓位大小,子类必须实现"""
       pass

class TrendStrategy(Strategy):
   """趋势跟踪策略"""
   def __init__(self, lookback=20, threshold=0.02):
       self.lookback = lookback
       self.threshold = threshold
   
   def generate_signals(self, price_data):
       # 具体实现省略,返回信号列表
       pass
   
   def get_position_size(self, signal, price):
       return signal['strength'] * 10000 // price

class MeanRevStrategy(Strategy):
   """均值回归策略"""
   def __init__(self, window=30, std_threshold=2.0):
       self.window = window
       self.std_threshold = std_threshold
   
   def generate_signals(self, price_data):
       # 具体实现省略,返回信号列表
       pass
   
   def get_position_size(self, signal, price):
       return abs(signal['zscore']) * 5000 // price
 

 主循环怎么用这些策略呢?

 

class StrategyRunner:
   """策略调度器:只依赖Strategy接口,不关心具体策略"""
   
   def __init__(self, strategy: Strategy):
       self.strategy = strategy
   
   def run(self, price_data):
       signals = self.strategy.generate_signals(price_data)
       for sig in signals:
           if sig['action'] == 'BUY':
               size = self.strategy.get_position_size(sig, sig['price'])
               self.executor.execute_buy(sig['symbol'], size, sig['price'])
           elif sig['action'] == 'SELL':
               size = self.strategy.get_position_size(sig, sig['price'])
               self.executor.execute_sell(sig['symbol'], size, sig['price'])
   
   def switch_strategy(self, new_strategy: Strategy):
       """运行时切换策略,一行代码搞定"""
       self.strategy = new_strategy
       logger.info(f"策略切换成功:{new_strategy.__class__.__name__}")
 

 这样设计的好处是:三个策略可以独立开发、独立测试、独立优化,主循环完全不需要改动。想从趋势策略切换到套利策略?一行代码:runner.switch_strategy(MeanRevStrategy())。这就是设计模式的力量。

 五、实战四:装饰器叠加——给函数赋予多重能力

 装饰器最强大的特性,是可以叠加。Python的执行顺序是从下到上——写在下面的装饰器先执行。所以当你看到这样的代码:

 

@log_execution
@timing
@risk_check
@retry(max_attempts=3, delay=1.0)
def fetch_market_data(symbol: str, start_date: str, end_date: str) -> pd.DataFrame:
   """获取行情数据:自动日志+计时+风控+重试"""
   return akshare_stock_zh_a_hist(symbol=symbol, start_date=start_date, end_date=end_date)
 

 这个函数被赋予了四重能力:自动重试(网络不稳时自动重跑)、风控前置检查(交易时段才允许调用)、性能计时(每次调用记录耗时)、自动日志(调用时自动记录输入输出)。

 一个函数,四行装饰器,等于四十行重复代码。这就是工程化的威力:不是在写"能跑"的代码,是在写"好维护、好扩展、好测试"的代码。

 六、写在最后:代码是写给人看的,顺带机器执行

 我在柳州做量化将近十年,写过几万行代码。最早追求的是"能赚钱就行",后来慢慢变成"能跑就行",再后来才明白,真正值钱的是"别人能看懂、出了问题能排查、未来能扩展"的代码。

 装饰器和设计模式,不是"炫技",是经验沉淀下来的最佳实践。这些模式被全世界程序员反复验证过,它们解决的不是理论问题,是真实项目中反复出现的真实结构问题。用对了,你的代码库可以从"一个人勉强维护"变成"一个团队高效协作"。

 我现在带一个实习生,进来的第一件事不是写策略,是先花一周时间把装饰器和几个常用设计模式弄明白。这一周的投资,回报是后面几个月的代码质量提升。

 最后说一句:代码的优雅程度,反映的是你对问题的理解深度。你能把多少复杂的横切逻辑用一个装饰器解决,反映的是你对"关注点分离"的理解有多深。你能设计出多灵活的多策略架构,反映的是你对"抽象"这个概念的掌握有多扎实。这些东西,比任何单个策略都更值得花时间。


 最后说一句

 攀岩的时候,教练跟我说过一句话:最省力的动作,往往是最正确的动作。代码也一样——最简洁优雅的实现,往往是对问题理解最到位的那一个。花时间把代码写优雅,不是浪费时间,是认知升级的体现。


 免责声明:本文仅供参考,不构成任何投资建议。Python代码示例需要根据实际情况调整,投资有风险,决策需谨慎。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-16 03:54:38 HTTP/2.0 GET : https://f.mffb.com.cn/a/485905.html
  2. 运行时间 : 0.149813s [ 吞吐率:6.67req/s ] 内存消耗:4,446.76kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=cbed43c15b757a6803cdd453b10f750c
  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.000770s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000870s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000361s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000290s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000506s ]
  6. SELECT * FROM `set` [ RunTime:0.000183s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000610s ]
  8. SELECT * FROM `article` WHERE `id` = 485905 LIMIT 1 [ RunTime:0.000433s ]
  9. UPDATE `article` SET `lasttime` = 1776282878 WHERE `id` = 485905 [ RunTime:0.017775s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000281s ]
  11. SELECT * FROM `article` WHERE `id` < 485905 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000475s ]
  12. SELECT * FROM `article` WHERE `id` > 485905 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000522s ]
  13. SELECT * FROM `article` WHERE `id` < 485905 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000739s ]
  14. SELECT * FROM `article` WHERE `id` < 485905 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000780s ]
  15. SELECT * FROM `article` WHERE `id` < 485905 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002376s ]
0.151400s