inspect模块在python中用于分析和操作代码结构,能获取函数名、调用栈、参数签名、类成员及源码等信息。1.使用inspect.stack()可获取调用栈信息,如当前函数被谁调用;2.inspect.signature()可动态分析函数参数,适用于编写通用装饰器;3.inspect.getmembers()可用于检查类的方法与属性;4.inspect.getsource()等函数可读取源码或文档字符串,适合生成文档或调试。这些功能在元编程、框架开发和调试中非常实用。
在Python中,inspect模块是一个非常强大的工具,它能让你“看穿”代码本身。尤其是在做元编程、调试或者写框架时,掌握一些inspect的实用技巧可以帮你省去不少麻烦。
下面几个场景,就是你在日常开发中可能会遇到的问题,以及如何用`inspect模块巧妙解决的方法。
有时候你想知道某个函数被谁调用了,或者想打印出当前执行的函数名用于调试,这时候就可以用inspect.stack()。
import inspect
def who_called_me():
caller = inspect.stack()[1]
print(f"被 {caller.function} 在第 {caller.lineno} 行调用")
def test():
who_called_me()
test()这样你就能快速定位到是谁调用了这个函数。这在调试大型项目的时候特别有用,尤其是当你不确定某个函数是从哪里被触发的。
立即学习“Python免费学习笔记(深入)”;
常用操作:
inspect.currentframe():获取当前帧对象inspect.getouterframes():获取调用栈的所有帧inspect.getframeinfo():获取帧的信息,比如文件名、行号等你有没有遇到过这样的情况:你写了一个装饰器,但希望它能自动适配不同参数的函数?这时候inspect.signature()就派上用场了。
from inspect import signature
def my_decorator(func):
sig = signature(func)
print(f"函数 {func.__name__} 的参数是:{sig}")
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
@my_decorator
def example(a, b=2):
pass输出结果会告诉你这个函数有两个参数,一个是必填的a,一个是默认值为2的b。你可以基于这些信息做更智能的参数处理,比如验证类型、生成文档等。
关键点:
signature.parameters:返回一个有序字典,包含所有参数如果你在做反射或者动态加载模块,可能需要检查一个类有哪些方法、属性,或者判断一个对象是否是某种类型。
import inspect
class MyClass:
def method_one(self):
pass
def method_two(self):
pass
methods = inspect.getmembers(MyClass, predicate=inspect.isfunction)
print(methods)这段代码会列出MyClass中的所有方法。你也可以换成其他predicate,比如ismethod、ismethoddescriptor等来筛选不同的成员。
常见用途包括:
你还可以用inspect直接读取函数或类的源码,这对于调试或生成文档很有帮助。
import inspect
def sample_func(x: int, y: str) -> bool:
"""示例函数"""
return x > 0 and y != ""
source = inspect.getsource(sample_func)
print(source)除了getsource,还有几个相关函数:
getdoc():获取对象的文档字符串(docstring)getcomments():获取源码顶部的注释getfile():获取定义该对象的文件路径这对自动生成文档、分析代码结构非常有帮助,尤其适合写自动化工具链时使用。
基本上就这些。虽然inspect模块看起来不是每天都要用的东西,但在做一些高级功能(比如写框架、自动化测试、调试工具)时,它确实能帮你节省不少时间。关键是理解它的各个函数能做什么,然后根据实际需求灵活组合使用。
以上就是Python中inspect模块 代码自省inspect的元编程实用技巧的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号