当前位置:首页>java>Python类型注解:让代码更清晰、更可靠的实用指南

Python类型注解:让代码更清晰、更可靠的实用指南

  • 2026-02-05 04:21:29
Python类型注解:让代码更清晰、更可靠的实用指南

作为一名Python开发者,你是否曾遇到过这些问题?

  • 接手别人的代码时,盯着函数参数半天,不知道该传什么类型的值;

  • 自己写的代码隔了一段时间再看,忘记了变量的具体类型,调试时反复猜测;

  • 团队协作中,因为参数类型不明确,经常出现“传错值”的低级bug。

其实,解决这些问题的关键,就藏在Python 3.5版本引入的一个重要特性——类型注解(Type Annotations)里。

今天这篇文章,我们就从基础到进阶,全面拆解Python类型注解的用法、价值和实用工具,帮你彻底搞懂并用上这个提升代码质量的“神器”。

一、什么是Python类型注解

首先要明确:Python 类型注解是在 Python 3.5 版本(通过 PEP 484 提案)正式引入的特性,它是一种给变量、函数参数、函数返回值标注类型的语法,核心作用是增强代码的可读性和可维护性,而非强制类型检查(Python本质上还是动态类型语言,解释器运行时不会验证注解的正确性)。

举个最简单的例子,没有类型注解的函数是这样的:

def add(a, b):    return a + b

我们无法直接从函数定义中看出a和b应该是什么类型,返回值又是什么类型。加上类型注解后,就清晰多了:

def add(aint, bint) -> int:    return a + b

这里的a: intb: int表示参数a和b是整数类型,-> int表示函数返回值是整数类型。需要注意的是:即使我们给a标注了int类型,运行时传入字符串类型,Python解释器也不会报错(比如add("hello", "world")依然能得到"helloworld")。类型注解的核心价值是“标注”,而非“限制”

二、基础用法:变量与函数的类型注解

类型注解的基础用法主要分为两类:变量的类型注解和函数(含方法)的类型注解。

2.1 变量的类型注解

变量的类型注解语法非常简单,格式为:变量名: 类型 = 初始值。如果变量暂时不赋值,也可以先标注类型:

# 基础类型注解name: str = "张三"  # 字符串类型age: int = 25       # 整数类型height: float = 1.85  # 浮点数类型is_student: bool = True  # 布尔类型# 未赋值的变量注解address: str  # 后续赋值时,建议遵循标注的类型address = "北京市海淀区"

对于容器类型(列表、元组、字典、集合等),Python 3.9及以上版本支持“通用类型”注解(PEP 585),直接使用容器类本身加方括号标注元素类型;3.9以下版本则需要从typing模块导入对应的泛型类(如List、Tuple、Dict)。

# Python 3.9+ 容器类型注解(推荐)scores: list[int] = [908595]  # 元素为整数的列表user_info: tuple[strint] = ("张三"25)  # 第一个元素字符串,第二个整数的元组student_scores: dict[strint] = {"张三"90"李四"85}  # 键为字符串,值为整数的字典tags: set[str] = {"Python""编程""类型注解"}  # 元素为字符串的集合# Python 3.9以下版本(需导入typing模块)from typing import ListTupleDictSetscores: List[int] = [908595]user_info: Tuple[strint] = ("张三"25)student_scores: Dict[strint] = {"张三"90"李四"85}tags: Set[str] = {"Python""编程""类型注解"}

2.2 函数的类型注解

函数的类型注解包括“参数类型注解”和“返回值类型注解”,语法格式为:

def 函数名(参数1: 类型1, 参数2: 类型2, ...) -> 返回值类型:    函数体    return 返回值

下面结合不同场景,给出具体示例:

2.2.1 基础参数与返回值注解

def calculate_area(radius: float) -> float:    """计算圆的面积"""    import math    return math.pi * radius ** 2# 调用函数时,IDE会根据注解提示参数类型area = calculate_area(3.14)  # 正确:传入float类型# area = calculate_area("3.14")  # 虽然运行时不报错,但注解提示我们应该传入float

2.2.2 默认参数的注解

带有默认值的参数,注解放在参数名和默认值之间:

def greet(name: str, greeting: str = "Hello") -> str:    return f"{greeting}{name}!"# 调用示例print(greet("张三"))  # 输出:Hello, 张三!print(greet("李四""Hi"))  # 输出:Hi, 李四!

2.2.3 可变参数的注解

对于*args(可变位置参数)和**kwargs(可变关键字参数),注解方式如下:

def sum_numbers(*args: int) -> int:    """求和任意个整数"""    return sum(args)def print_user_info(**kwargs: str) -> None:    """打印用户信息,关键字参数值均为字符串"""    for key, value in kwargs.items():        print(f"{key}{value}")# 调用示例print(sum_numbers(123))  # 输出:6print_user_info(name="张三", age="25")  # 注意:这里age标注为str,实际传int也能运行,但不推荐

注意:None类型的注解用None表示,函数无返回值时,返回值类型注解用None(或省略,但建议显式标注)

三、进阶用法:复杂场景的类型注解

在实际开发中,我们经常会遇到更复杂的类型场景(比如“一个变量可以是多种类型”、“函数返回多种类型”、“自定义类作为类型”等),这时候就需要用到typing模块中的进阶工具。

3.1 联合类型(Union):一个变量可以是多种类型

如果一个变量或参数可以是多种类型中的任意一种,就用Union(Python 3.10+ 也可以用|替代,更简洁)。

# Python 3.9及以下版本(需导入Union)from typing import Uniondef parse_id(id_value: Union[intstr]) -> int:    """将id值(整数或字符串)转换为整数"""    return int(id_value)# Python 3.10+ 版本(推荐用|)def parse_id(id_value: int | str) -> int:    return int(id_value)# 调用示例print(parse_id(123))  # 输出:123print(parse_id("456"))  # 输出:456

3.2 可选类型(Optional):允许为None的类型

如果一个变量或参数可以是某个类型,也可以是None,就用Optional(本质上是Union[T, None]的简写)。Python 3.10+ 也可以用T | None替代。

# Python 3.9及以下版本from typing import Optionaldef get_user_name(user_id: int) -> Optional[str]:    """根据用户ID获取用户名,找不到返回None"""    users = {1"张三"2"李四"}    return users.get(user_id)# Python 3.10+ 版本def get_user_name(user_id: int) -> str | None:    users = {1"张三"2"李四"}    return users.get(user_id)# 调用示例print(get_user_name(1))  # 输出:张三print(get_user_name(3))  # 输出:None

3.3 泛型类型(Generic):适配多种类型的通用函数/类

如果我们想写一个“通用”的函数或类,能处理多种类型的元素(比如一个通用的栈结构,既可以存int,也可以存str),就需要用到泛型(Generic)和类型变量(TypeVar)。

from typing import TypeVar, GenericList# 定义一个类型变量T,可以代表任意类型T = TypeVar("T")class Stack(Generic[T]):    """通用栈结构,支持任意类型的元素"""    def __init__(self):        self.items: List[T] = []    def push(self, item: T) -> None:        """入栈:添加元素,类型必须是T"""        self.items.append(item)    def pop(self) -> T | None:        """出栈:返回元素,类型是T或None"""        if self.items:            return self.items.pop()        return None# 使用泛型类:指定存储int类型int_stack = Stack[int]()int_stack.push(1)int_stack.push(2)print(int_stack.pop())  # 输出:2(类型为int)# 使用泛型类:指定存储str类型str_stack = Stack[str]()str_stack.push("hello")str_stack.push("python")print(str_stack.pop())  # 输出:python(类型为str)

通过泛型,我们可以让类或函数“适配多种类型”,同时保持类型注解的严谨性,避免用Any(任意类型)导致的类型信息丢失。

3.4 自定义类作为类型

当我们定义了一个自定义类(比如User),也可以用它作为类型注解,标注变量或参数是该类的实例。

class User:    def __init__(self, name: str, age: int):        self.name = name        self.age = agedef get_user_age(user: User) -> int:    """获取用户的年龄,参数必须是User实例"""    return user.age# 调用示例user = User("张三"25)print(get_user_age(user))  # 输出:25# 错误示例(注解提示):传入非User实例# print(get_user_age("张三"))  # 注解会提示类型不匹配

四、实用工具:让类型注解发挥实际作用

前面提到,Python解释器不会验证类型注解的正确性,那我们如何让类型注解“落地”,真正帮助我们检查类型错误呢?这就需要用到一些第三方工具。

4.1 类型检查工具:mypy

mypy是最流行的Python类型检查工具,它可以扫描你的代码,根据类型注解检查是否存在类型不匹配的问题,提前发现bug。

4.1.1 安装mypy

pip install mypy

4.1.2 使用mypy检查代码

创建一个test.py文件,写入以下代码(包含一个类型错误):

def add(aint, bint) -> int:    return a + b# 错误:传入字符串类型result = add("1""2")print(result)

用mypy检查:

mypy test.py

mypy会输出以下错误信息,帮我们定位问题:

test.py:5: error: Argument 1 to "add" has incompatible type "str"; expected "int"test.py:5: error: Argument 2 to "add" has incompatible type "str"; expected "int"Found 2 errors in 1 file (checked 1 source file)

注意:mypy只是静态检查工具,不会修改代码的运行逻辑。即使存在类型错误,代码依然可以运行(Python解释器不验证注解),但mypy的提示能帮我们提前修复问题。

4.2 IDE支持:让编码更高效

主流的Python IDE(如PyCharm、VS Code)都对类型注解有很好的支持,能根据注解提供:

  • 代码补全:输入变量或函数时,IDE会根据类型注解提示可用的属性或方法;

  • 类型提示:鼠标悬停在变量或函数上时,会显示其类型信息;

  • 实时错误提示:在编码过程中,IDE会实时标注类型不匹配的问题(类似mypy的功能)。

比如在PyCharm中,当你给变量标注List[int]后,输入变量名+.,IDE会自动提示列表的appendpop等方法,且会检查append的参数是否为int类型。

五、常见误区:使用类型注解的注意事项

在使用类型注解的过程中,很多开发者会陷入一些误区,这里总结几点关键注意事项:

5.1 不要过度依赖类型注解,忽略代码本身的可读性

类型注解是“辅助工具”,不能替代清晰的变量名、函数名和注释。比如:

# 不好的示例:变量名模糊,依赖注解才能理解x: List[int] = [1, 2, 3]# 好的示例:变量名清晰,注解锦上添花scores: List[int] = [1, 2, 3]

5.2 不要滥用Any类型

Any是“任意类型”的注解,表示变量可以是任何类型。如果过度使用Any,相当于放弃了类型注解的价值:

from typing import Any# 不推荐:过度使用Any,类型信息丢失def process_data(data: Any) -> Any:    return data

除非确实无法确定类型(比如处理动态生成的数据),否则尽量避免使用Any,而是用Union或泛型替代。

5.3 不要认为类型注解会影响代码性能

Python解释器在运行时会忽略类型注解,不会因为添加了注解而降低代码的运行速度。类型注解只是“静态信息”,不会参与运行时的计算。

5.4 并非所有代码都需要类型注解

对于简单的脚本(比如几十行的小工具),添加类型注解可能会增加开发成本,性价比不高。但对于大型项目、团队协作的代码、需要长期维护的代码,类型注解的价值会非常明显。

六、总结:为什么要使用Python类型注解

最后,我们再回到最初的问题:为什么要花时间学习和使用类型注解?核心原因有3点:

  1. 提升代码可读性:让变量、函数的类型一目了然,无论是自己维护还是他人接手,都能快速理解代码逻辑;

  2. 降低调试成本:通过类型检查工具和IDE支持,提前发现类型不匹配的bug,避免在运行时才暴露问题;

  3. 优化团队协作:明确的类型约定,减少因“参数类型”产生的沟通成本,让团队协作更高效。

Python类型注解不是“银弹”,但它绝对是提升代码质量的“实用工具”。从今天开始,不妨在你的项目中尝试使用类型注解,尤其是核心模块和常用函数,相信你会感受到它带来的改变。

如果觉得这篇文章对你有帮助,欢迎点赞、在看、转发给身边的Python开发者~ 你在使用类型注解的过程中遇到过哪些问题?欢迎在评论区留言讨论!

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-08 09:21:18 HTTP/2.0 GET : https://f.mffb.com.cn/a/464311.html
  2. 运行时间 : 0.103807s [ 吞吐率:9.63req/s ] 内存消耗:4,434.73kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=7b866a516133a29153fc6ebeca57e37b
  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.000525s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000736s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000294s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000261s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000557s ]
  6. SELECT * FROM `set` [ RunTime:0.001589s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000656s ]
  8. SELECT * FROM `article` WHERE `id` = 464311 LIMIT 1 [ RunTime:0.012047s ]
  9. UPDATE `article` SET `lasttime` = 1770513678 WHERE `id` = 464311 [ RunTime:0.009105s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.000934s ]
  11. SELECT * FROM `article` WHERE `id` < 464311 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000459s ]
  12. SELECT * FROM `article` WHERE `id` > 464311 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001194s ]
  13. SELECT * FROM `article` WHERE `id` < 464311 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000673s ]
  14. SELECT * FROM `article` WHERE `id` < 464311 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001478s ]
  15. SELECT * FROM `article` WHERE `id` < 464311 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001095s ]
0.106210s