当前位置:首页>python>Python函数式编程的5个实战模式:从lambda到高阶函数的工程化应用

Python函数式编程的5个实战模式:从lambda到高阶函数的工程化应用

  • 2026-08-22 02:09:46
Python函数式编程的5个实战模式:从lambda到高阶函数的工程化应用

Python不是纯函数式语言,但函数式编程模式在数据处理、API设计和并发编程中越来越重要。Python代码中,函数作为一等公民的特性被更深入地利用。以下5个模式从基础到高阶,展示函数式思维如何解决工程问题。

模式一:lambda与operator模块替代简单函数定义

简单操作不需要def,lambda和operator模块让代码更紧凑。

from operator import itemgetter, attrgetter, methodcallerusers = [    {"name": "Alice", "age": 25, "score": 88},    {"name": "Bob", "age": 30, "score": 92},    {"name": "Charlie", "age": 22, "score": 95}]def get_score(user):    return user["score"]users_sorted = sorted(users, key=get_score, reverse=True)users_sorted = sorted(users, key=lambda u: u["score"], reverse=True)users_sorted = sorted(users, key=itemgetter("score"), reverse=True)users_sorted = sorted(users, key=lambda u: (u["age"], -u["score"]))class Product:    def __init__(self, name, price, stock):        self.name = name        self.price = price        self.stock = stock    def in_stock(self):        return self.stock > 0products = [Product("A", 100, 5), Product("B", 200, 0), Product("C", 150, 10)]in_stock_products = filter(attrgetter("in_stock"), products)names = list(map(attrgetter("name"), products))data = [("Alice", 25, "Engineer"), ("Bob", 30, "Manager")]ages = list(map(itemgetter(1), data))name_and_role = list(map(itemgetter(0, 2), data))predicates = {    "adult": lambda age: age >= 18,    "senior": lambda age: age >= 60,    "teen": lambda age: 13 <= age < 20}def check_age(age, category):    return predicates.get(category, lambda x: False)(age)print(check_age(25, "adult"))  # Trueprint(check_age(65, "senior"))  # True

lambda和operator的适用边界:简单一次性操作→lambda;频繁调用的属性/元素提取→operator(性能更好);复杂逻辑→还是def可读性更强。

模式二:partial冻结参数创建专用函数

functools.partial把多参数函数变成单参数函数,适合创建配置化的回调和处理器。

from functools import partialimport jsondef dump_json_compact(obj):    return json.dumps(obj, ensure_ascii=False, separators=(',', ':'))def dump_json_pretty(obj):    return json.dumps(obj, ensure_ascii=False, indent=2)dump_compact = partial(json.dumps, ensure_ascii=False, separators=(',', ':'))dump_pretty = partial(json.dumps, ensure_ascii=False, indent=2)data = {"name": "Alice", "items": [1, 2, 3]}print(dump_compact(data))  # {"name":"Alice","items":[1,2,3]}print(dump_pretty(data))   # 带缩进的美化输出import requestssession = requests.Session()session.headers.update({"Authorization": "Bearer token123", "Content-Type": "application/json"})api_get = partial(session.get, timeout=10)api_post = partial(session.post, timeout=10)response = api_get("https://api.example.com/users")response = api_post("https://api.example.com/users", json={"name": "Alice"})from operator import mul, adddouble = partial(mul, 2)      # double(x) = x * 2triple = partial(mul, 3)      # triple(x) = x * 3increment = partial(add, 1)   # increment(x) = x + 1numbers = [1, 2, 3, 4, 5]doubled = list(map(double, numbers))print(doubled)  # [2, 4, 6, 8, 10]class Validator:    def __init__(self, min_len=0, max_len=100, pattern=None):        self.min_len = min_len        self.max_len = max_len        self.pattern = pattern    def validate(self, value):        if not self.min_len <= len(value) <= self.max_len:            return False        if self.pattern and not self.pattern.match(value):            return False        return Truevalidate_username = partial(Validator(min_len=3, max_len=20).validate)validate_password = partial(Validator(min_len=8, max_len=50).validate)

partial的价值:减少重复参数传递、创建语义化的专用函数、提高代码可读性。

模式三:map/filter/reduce与推导式的选择策略

函数式工具和数据推导式各有优势,选择取决于场景和团队偏好。

from functools import reducefrom operator import add, mulnumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]squares_map = list(map(lambda x: x ** 2, numbers))squares_comp = [x ** 2 for x in numbers]even_squares_map = list(map(lambda x: x ** 2, filter(lambda x: x % 2 == 0, numbers)))even_squares_comp = [x ** 2 for x in numbers if x % 2 == 0]def parse_log(line):    """解析日志行,返回结构化数据"""    parts = line.strip().split(" | ")    return {        "timestamp": parts[0],        "level": parts[1],        "message": parts[2]    }def is_error(log):    return log["level"] == "ERROR"def extract_message(log):    return log["message"]log_lines = [    "2026-06-29 10:00:00 | INFO | Server started",    "2026-06-29 10:05:23 | ERROR | Database connection failed",    "2026-06-29 10:10:45 | INFO | Request processed"]error_messages = list(    map(extract_message,        filter(is_error,               map(parse_log, log_lines))))error_messages_comp = [    log["message"]    for log in (parse_log(line) for line in log_lines)    if log["level"] == "ERROR"]product = reduce(mul, numbers, 1)  # 初始值1,防止空序列错误words = ["Python", "is", "powerful"]sentence = reduce(lambda a, b: f"{a} {b}", words)from operator import itemgetterusers = [{"name": "Alice", "score": 85}, {"name": "Bob", "score": 92}]top_user = reduce(lambda a, b: a if a["score"] > b["score"] else b, users)def count_categories(acc, item):    """累积统计类别数量"""    category = item.get("category", "unknown")    acc[category] = acc.get(category, 0) + 1    return accitems = [    {"name": "A", "category": "electronics"},    {"name": "B", "category": "clothing"},    {"name": "C", "category": "electronics"}]category_counts = reduce(count_categories, items, {})print(category_counts)  # {'electronics': 2, 'clothing': 1}

选择策略:简单转换过滤→推导式;多步流水线→函数式组合;累积聚合→reduce。

模式四:闭包与装饰器的工厂模式

闭包让函数"记住"创建时的环境,是实现配置化行为和状态封装的基础。

from functools import wrapsdef create_logger(prefix: str, level: str = "INFO"):    """创建带前缀的专用日志函数"""    def log(message: str):        print(f"[{level}] {prefix}: {message}")    return logauth_logger = create_logger("AUTH", "WARN")db_logger = create_logger("DB", "ERROR")auth_logger("Login failed for user alice")  # [WARN] AUTH: Login failed for user alicedb_logger("Connection timeout")              # [ERROR] DB: Connection timeoutdef create_memoized(func, max_size=128):    """创建带LRU缓存的函数"""    cache = {}    access_order = []    @wraps(func)    def wrapper(*args):        if args in cache:            access_order.remove(args)            access_order.append(args)            return cache[args]        result = func(*args)        cache[args] = result        access_order.append(args)        if len(cache) > max_size:            oldest = access_order.pop(0)            del cache[oldest]        return result    return wrapperdef require_permission(permission: str):    """创建检查特定权限的装饰器"""    def decorator(func):        @wraps(func)        def wrapper(user, *args, **kwargs):            if permission not in user.get("permissions", []):                raise PermissionError(f"需要权限: {permission}")            return func(user, *args, **kwargs)        return wrapper    return decorator@require_permission("admin")def delete_user(user, target_id: str):    print(f"删除用户: {target_id}")@require_permission("write")def create_post(user, title: str, content: str):    print(f"创建文章: {title}")admin = {"name": "Alice", "permissions": ["admin", "write"]}reader = {"name": "Bob", "permissions": ["read"]}create_post(admin, "Hello", "World")  # 成功try:    create_post(reader, "Hello", "World")  # 权限错误except PermissionError as e:    print(e)  # 需要权限: writedef create_state_machine():    """创建简单的状态机"""    state = "idle"  # 闭包变量    def transition(event: str):        nonlocal state        transitions = {            "idle": {"start": "running"},            "running": {"pause": "paused", "stop": "idle"},            "paused": {"resume": "running", "stop": "idle"}        }        if event in transitions.get(state, {}):            old_state = state            state = transitions[state][event]            print(f"状态转移: {old_state} -> {state} (事件: {event})")            return True        else:            print(f"无效转移: {state} -/-> {event}")            return False    def get_state():        return state    return transition, get_statetransition, get_state = create_state_machine()transition("start")    # idle -> runningtransition("pause")    # running -> pausedtransition("stop")     # paused -> idle

闭包的关键:nonlocal声明让内层函数可以修改外层函数的变量。这是Python实现状态封装和工厂模式的核心机制。

模式五:函数组合与管道(Pipeline)设计

把多个小函数组合成处理流水线,是函数式编程的核心设计模式。

from functools import reducefrom typing import Callable, TypeVarT = TypeVar('T')def compose(*functions: Callable) -> Callable:    """函数组合:compose(f, g, h)(x) = f(g(h(x)))"""    def composed(value):        return reduce(lambda v, f: f(v), reversed(functions), value)    return composeddef pipe(value, *functions: Callable):    """管道:pipe(x, f, g, h) = h(g(f(x)))"""    return reduce(lambda v, f: f(v), functions, value)raw_data = [    "  Alice, 25, Engineer  ",    "Bob, 30, Manager",    "  Charlie, 22, Designer  "]def strip_lines(lines):    return [line.strip() for line in lines]def split_fields(lines):    return [line.split(", ") for line in lines]def create_records(fields_list):    return [        {"name": f[0], "age": int(f[1]), "role": f[2]}        for f in fields_list    ]def filter_adults(records):    return [r for r in records if r["age"] >= 25]def extract_names(records):    return [r["name"] for r in records]process = compose(    extract_names,    filter_adults,    create_records,    split_fields,    strip_lines)result = process(raw_data)print(result)  # ['Alice', 'Bob']result = pipe(    raw_data,    strip_lines,    split_fields,    create_records,    filter_adults,    extract_names)print(result)  # ['Alice', 'Bob']class Pipeline:    """可组合的管道对象"""    def __init__(self, value):        self.value = value    def __or__(self, func):        return Pipeline(func(self.value))    def __repr__(self):        return f"Pipeline({self.value!r})"    def unwrap(self):        return self.valueresult = (    Pipeline(raw_data)    | strip_lines    | split_fields    | create_records    | filter_adults    | extract_names).unwrap()print(result)  # ['Alice', 'Bob']def create_validator(*checks: Callable[[T], tuple[bool, str]]) -> Callable[[T], T]:    """创建验证管道:任一检查失败即抛出异常"""    def validate(value: T) -> T:        for check in checks:            is_valid, message = check(value)            if not is_valid:                raise ValueError(f"验证失败: {message}")        return value    return validatedef check_not_empty(data: dict):    return bool(data), "数据不能为空"def check_has_required(data: dict):    required = ["name", "email"]    missing = [f for f in required if f not in data]    return not missing, f"缺少必填字段: {missing}"def check_email_format(data: dict):    import re    email = data.get("email", "")    pattern = r'^[\w\.-]+@[\w\.-]+\.\w+$'    return re.match(pattern, email), "邮箱格式错误"validate_user = create_validator(check_not_empty, check_has_required, check_email_format)try:    validate_user({"name": "Alice", "email": "alice@example.com"})  # 通过    validate_user({"name": "Bob"})  # 失败:缺少emailexcept ValueError as e:    print(e)  # 验证失败: 缺少必填字段: ['email']

函数式编程在Python中的边界

Python的函数式编程有明确边界,强行纯函数式反而降低代码质量:

def recursive_sum(n):    if n <= 0:        return 0    return n + recursive_sum(n - 1)  # 深度1000时RecursionErrorprocess = lambda data: [    {k: v.strip() if isinstance(v, str) else v for k, v in item.items()}    for item in filter(lambda x: x.get("active"), data)]def clean_record(item):    return {k: v.strip() if isinstance(v, str) else v for k, v in item.items()}def is_active(item):    return item.get("active")def process_data(data):    return [clean_record(item) for item in data if is_active(item)]from dataclasses import dataclass@dataclass(frozen=True)class Point:    x: float    y: float    def move(self, dx, dy):        return Point(self.x + dx, self.y + dy)from itertools import count, islicedef fibonacci():    a, b = 0, 1    while True:        yield a        a, b = b, a + bfirst_10 = list(islice(fibonacci(), 10))

函数式编程在Python中的价值不是"写纯函数式代码",是"用函数式思维解决特定问题"。数据转换流水线、配置化行为、闭包状态封装——这些场景下,函数式模式让代码更简洁、更可组合、更易测试。理解边界,选择合适工具,是2026年Python工程师的必备判断能力。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-22 02:33:50 HTTP/2.0 GET : https://f.mffb.com.cn/a/507512.html
  2. 运行时间 : 0.391364s [ 吞吐率:2.56req/s ] 内存消耗:4,796.09kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=64a6df81aeb636fe35d71a5fa23a3389
  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.000846s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001266s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.044544s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.007165s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001684s ]
  6. SELECT * FROM `set` [ RunTime:0.004919s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001864s ]
  8. SELECT * FROM `article` WHERE `id` = 507512 LIMIT 1 [ RunTime:0.029868s ]
  9. UPDATE `article` SET `lasttime` = 1787337230 WHERE `id` = 507512 [ RunTime:0.045459s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000852s ]
  11. SELECT * FROM `article` WHERE `id` < 507512 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001422s ]
  12. SELECT * FROM `article` WHERE `id` > 507512 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.027116s ]
  13. SELECT * FROM `article` WHERE `id` < 507512 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.010890s ]
  14. SELECT * FROM `article` WHERE `id` < 507512 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.005438s ]
  15. SELECT * FROM `article` WHERE `id` < 507512 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.005986s ]
0.394983s