Python - inspect 模块的简单使用
Python中的inspect模块解析
Python的inspect模块是一个强大的内省工具,允许开发者检查(inspect)活动对象和源代码。它提供了一系列函数,用于获取信息关于正在运行的程序和调用堆栈,非常适合进行调试和动态分析。本文将通过介绍inspect模块的关键功能,并结合实际案例代码,来探索其在日常开发中的应用。
常用方法
1. 获取当前执行的函数或方法名、文件路径【并不是调用方】
在日志记录或调试时,知道当前执行的函数名是非常有用的
import inspect
def who_am_i():
# 输出当前文件绝对路径
print(inspect.currentframe().f_code.co_filename)
return inspect.currentframe().f_code.co_name
print(who_am_i()) # 输出: who_am_i

个人认为比较有用的就是 co_filename、co_name
2. 获取调用者信息
获取当前函数或方法的调用者信息
import inspect
def caller_info():
frame = inspect.currentframe().f_back
print(f调用者 {frame.f_code.co_filename} 调用行号 d{frame.f_lineno}")
def test():
caller_info() # 调用以获取调用者信息
test()
这个例子显示了如何获取调用当前函数的代码位置,非常有助于调试复杂的调用链
3. 查看函数参数
inspect模块可以用来检查函数或方法的参数,这对于动态分析和生成文档非常有用
import inspect
def sample_function(name, age=25):
pass
sig = inspect.signature(sample_function)
print(sig) # 输出: (name, age=25)
4. 获取源代码
inspect还可以用来获取函数、类或模块的源代码
import inspect
def my_function():
"""A simple function."""
pass
print(inspect.getsource(my_function))
5. 检查类和实例
inspect模块提供了多种方式来检查类和实例,比如获取类的所有方法、属性等
class MyClass:
def method_one(self):
pass
def method_two(self):
pass
# 获取类的所有成员方法
methods = inspect.getmembers(MyClass, predicate=inspect.isfunction)
print(methods) # 输出 MyClass 中定义的方法
实际案例:自动化场景下的应用
一个常见的使用场景是动态地调用函数或方法,并基于它们的签名自动生成文档。
def test():
# 获取调用方
frame = inspect.currentframe().f_back
# 获取调用方文件绝对路径
caller_file = inspect.getfile(frame)
# 这种方式也可以
caller_file = frame.f_code.co_filename
...
params = [
caller_file,
"--env-data",
env_data.json(),
f"--count={count}",
"-m",
mark,
]
一个基于 Pytest 自动化测试项目
- 每个 py 模块都会调用这个方法来执行 Pytest 命令来跑测试用例
- 那怎么才能准确知道要跑哪个文件呢?
- 通过第一、二行代码即可
更便捷的方式
Python - inspect 模块的简单使用的更多相关文章
- python inspect 模块 和 types 模块 判断是否是方法,模块,函数等内置特殊属性
python inspect 模块 和 types 模块 判断是否是方法,模块,函数等内置特殊属性 inspect import inspect def fun(): pass inspect.ism ...
- Python Logging模块的简单使用
前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...
- python——inspect模块
inspect模块常用功能 import inspect # 导入inspect模块 inspect.isfunction(fn) # 检测fn是不是函数 inspect.isgenerator((x ...
- python inspect.stack() 的简单使用
1. #python # -*- encoding: utf-8 -*- #获取函数的名字 import inspect def debug(): callnamer = inspect.stack( ...
- Python第三方模块--requests简单使用
1.requests简介 requests是什么?python语言编写的,基于urllib的第三方模块 与urllib有什么关系?urllib是python的内置模块,比urllib更加简洁和方便使用 ...
- 用python socket模块实现简单的文件下载
server端: # ftp server端 import socket, os, time server = socket.socket() server.bind(("localhost ...
- python optparse模块的简单用法
# coding = utf-8 from optparse import OptionParser from optparse import OptionGroup usage = 'Usage: ...
- Python Turtle模块的简单应用
时钟 import turtle as t import datetime as dt #画出背景 game = t.Screen() game.bgcolor("white") ...
- 浅谈Python时间模块
浅谈Python时间模块 今天简单总结了一下Python处理时间和日期方面的模块,主要就是datetime.time.calendar三个模块的使用.希望这篇文章对于学习Python的朋友们有所帮助 ...
- 简单认识python cmd模块
0X00 前言 在早前用别人的工具时,发现有些大佬会用到交互式shell,那时候就挺好奇的,但是一直都没有看一下怎么做到的. 今天在翻p牛的博客的时候,看到他早之前写的一个工具就有用到交互式shell ...
随机推荐
- C语言中位运算取余
位运算取余 求一个数被另一个数整除的余数,可以用求余运算符"%",但是,如果不允许使用求余运算符,又该怎么办呢?下面介绍一种方法,是通过位运算来求余,但是注意:该方法只对除数是2的 ...
- 【OpenGL ES】绘制正方形
1 前言 [OpenGL ES]绘制三角形 中介绍了绘制三角形的方法,本文将介绍绘制正方形的方法. OpenGL 以点.线段.三角形为图元,没有提供绘制正方形内部的接口.要绘制正方形内部,必须 ...
- pico命令
pico命令 pico是一个简单易用.以显示导向为主的文字编辑程序,具有pine电子邮件编写器的风格.在现代Linux系统上,nano即pico的GNU版本是默认安装的,在使用上和pico一模一样. ...
- 如何避免FOUC
如何避免FOUC FOUC即无样式内容闪烁也可以称为文档样式短暂失效,主要就是指HTML已加载而样式表并未加载,此后样式表再加载而产生的闪烁现象. 样式表前置 根据浏览器渲染的顺序,将CSS在< ...
- Java设计模式-备忘录模式Memento
介绍 备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 可以这里理解备忘录模式:现实生 ...
- Go语言并发编程(3):sync包介绍和使用(上)-Mutex,RWMutex,WaitGroup,sync.Map
一.sync 包简介 在并发编程中,为了解决竞争条件问题,Go 语言提供了 sync 标准包,它提供了基本的同步原语,例如互斥锁.读写锁等. sync 包使用建议: 除了 Once 和 WaitGro ...
- golang中协程&管道&锁
进程和线程 进程(Process)就是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基 本单位,进程是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进 程都有一个自己的地 ...
- queryset高级用法:prefetch_related
这个方法和select_related方法类型,就是访问多个表中的数据的时候,减少查询的次数.这个方法是为了解决一对多和多对多的关系的查询问题.比如要获取标题中带有hello字符串的文章以及它的所有标 ...
- 【LeetCode排序专题02】最小k个数,关于快速排序的讨论
最小k个数 https://leetcode.cn/problems/smallest-k-lcci/ 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个 ...
- C程序分别实现下列字符阵列的输出
C程序分别实现下列字符阵列的输出:(https://zhuanlan.zhihu.com/p/443989560 可以参考这个博主写的) 1,左下三角形(代码) 1 #include <s ...