首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在python中,我如何知道我的函数是在哪段代码中被调用的?

在Python中,可以使用inspect模块来获取函数被调用的信息。具体步骤如下:

  1. 首先,导入inspect模块:import inspect
  2. 在函数内部,使用inspect.stack()方法获取当前调用栈的信息:stack = inspect.stack()
  3. 调用栈是一个列表,其中每个元素都是一个包含调用信息的元组。可以通过访问元组的元素来获取所需的信息。
  4. 调用栈的第一个元素是当前函数的调用信息,第二个元素是调用当前函数的函数的调用信息,以此类推。
  5. 可以使用inspect.getframeinfo()方法来获取调用信息的更多细节。
  6. 通过访问调用信息的元素,如文件名、行号等,可以确定函数被调用的位置。

下面是一个示例代码:

代码语言:txt
复制
import inspect

def my_function():
    stack = inspect.stack()
    caller_frame = stack[1]
    caller_info = inspect.getframeinfo(caller_frame[0])
    print(f"My function is called from {caller_info.filename} at line {caller_info.lineno}")

def another_function():
    my_function()

another_function()

运行以上代码,输出将会是类似于以下内容:

代码语言:txt
复制
My function is called from example.py at line 10

请注意,inspect模块提供了许多其他有用的函数和类,可以用于获取更多关于代码结构和执行的信息。详细信息可以参考Python官方文档中的inspect模块文档:https://docs.python.org/3/library/inspect.html

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言ARM函数调用时,栈如何变化

r11 栈帧指针 fp。 3. r12 内部调用暂时寄存器 ip。它在过程链接胶合代码(例如,交互操作胶合代码)中用于此角色。在过程调用之间,可以将它用于任何用途。...被调用函数返回之前不必恢复 r12。 4. 寄存器 r13 栈指针 sp。它不能用于任何其它用途。sp 存放退出被调用函数时必须与进入时值相同。 5....如何能让读者接受吸收更快,一直觉得按照学习效率来讲的话顺序应该是视频,图文,文字。...反正比较喜欢视频类教学。这里给大家画下栈变化过程是什么样子。这里结合上面的代码来画,希望有助于读者理解。...fun代码 13.c入栈 14.可以看到函数fun数据 形参a,b 在上一层函数.

13.6K83

别@了,就一个写代码知道哪家不正规Python爬取美团店铺数据,并可视化展示数据

前言 今天教爬取每天按摩店数据,不爬不知道呀,光是一个城市前10页数据,都有1000多家店了,全部爬完,那不得至少3000家以上?...现在市场需求都那么大吗 代码主要内容 动态数据抓包 json数据解析 requests模块使用 保存csv 环境介绍 python 3.8 解释器 pycharm 编辑器 开始代码,先导包 import...= response.json()['data']['searchResult'] # for 遍历 提取列表每一个元素内容 for index in searchResult: # pprint.pprint..., 'limit': '32', 'offset': page, 'cateId': '-1', 'q': '按摩', } 这个第二页和第三页数据内容...pyecharts.globals import ThemeType #引入主题 df = pd.read_csv('美团按摩店top2.csv',encoding='utf-8',engine="python

69950

如何调试 Webpack 问题

emmm,成功勾起好奇心了,虽然写过一些 Webpack 源码分析文章,但 webpack-dev-server 确实不在知识范围,好在有秘籍《如何阅读源码 —— 以 Vetur 为例》,时候展示真正技术了...局部分析 切入点:验证 serve-index 包作用 经过上面的分析,虽然还不知道问题具体出在哪里,但大致可以判定跟 serve-index 包强相关,先搜一下 webpack-dev-server...不过,作为一个有追求程序员怎么会止步于此呢,我们继续往下挖呀:到底那一代码决定了流程会不会进入 serveIndex 中间件?...嗯,有思路了,我们沿着 webpack-dev-server middleware 队列,找到 serveIndex 之前都有哪些中间件,分析这些中间件代码应该就能解答: 到底那一代码决定了流程会不会进入...但是,express 中间件架构下,从 next 调用到实际中间件函数隔着很远调用链路,很难通过断点调用堆栈判断出上一级中间件,以及更更上一级中间件在哪里啊: 这时候不能硬刚,得换一个技巧了 ——

1.1K30

如何调试 Webpack 问题

emmm,成功勾起好奇心了,虽然写过一些 Webpack 源码分析文章,但 webpack-dev-server 确实不在知识范围,好在有秘籍《如何阅读源码 —— 以 Vetur 为例》,时候展示真正技术了...虽然不知道这是在那一层生成,但可以肯定绝对不是,而且这是 HTTP 层面发生。...不过,作为一个有追求程序员怎么会止步于此呢,我们继续往下挖呀:到底那一代码决定了流程会不会进入 serveIndex 中间件?...但是,express 中间件架构下,从 next 调用到实际中间件函数隔着很远调用链路,很难通过断点调用堆栈判断出上一级中间件,以及更更上一级中间件在哪里啊: ?.../lib/util.js 文件中被使用了 23 次 那,就先挑软柿子捏,看看 middleware.js 文件怎么用: const { getFilenameFromUrl } = require

2.8K30

怎样学Python 第二十一课 模块简介

(注:CoD使命召唤游戏) 现在想象一下,如果你像阿拉斯加这样特定环境露营,你肯定需要特殊装备才能在那里露营,想象一下,如果你每次驻扎时都必须为每一个单一环境带来每一件装备,这将是一个巨大痛苦...Python也是如此,为什么要把所有的函数和类放在一个地方? 它什么也不做,只是减缓了解释者速度,如果我们将所有代码分成不同组,那么只需选择我们需要并运行代码就会更容易,更快速!...现在我们已经了解了哪些模块,我们可以演示如何使用它们,这里用作实例Pythonos模块。 方法1:导入整个模块 当我们想要使用某个模块时,我们需要导入该模块。...如果我们导入整个模块,我们需要在调用函数之前指定模块名称,以便解释器知道在哪里查找该函数。...getcwd()函数,我们可以不指定模块情况下调用它了。

76260

Python DeBug7个步骤【Programming】

想想看,当蛋糕没有起酥时候,忘记加发酵粉多么明显。 时候查看一下堆了。很有可能问题出在代码,而不是Python核心,甚至不是第三方软件包,所以先扫描堆栈,代码寻找代码行。...“但是Maria,”听到你说,“如果有一个堆栈跟踪,这些都是有帮助,但是只有一个失败测试。该从哪里开始呢?” Pdb,Python调试器。 代码中找到一个您知道调用应该命中位置。...但是看看你把print语句放在哪函数,你不知道怎么到那里。查看代码一个很好方式来了解你将要去地方,但是对于了解你去过地方来说是很糟糕。...是的,已经代码查找了一个函数调用位置,但是这可能会变得很乏味,并且对于一个流行函数来说并不能缩小范围。Pdb非常有用。 您按照建议,插入pdb断点并运行测试。...如果通过查看堆栈,您不知道另一个调用如何或者在哪里出错,那么堆栈中找到属于您一些代码,并在该文件中放置一个断点,堆栈跟踪断点之上放置一行。再试一次新测试。

1.2K00

类和函数傻傻分不清楚?三个例子讲明白

函数本质就是一有特定功能、可以重复使用代码,这段代码已经被提前编写好了,并且为其起一个“好听”名字。在后续编写程序过程,如果需要同样功能,直接通过起好名字就可以调用这段代码。...很显然,这样答案并没有让人搞明白类和函数到底不一样在哪里。但是里面提到了类创建一个对象,所以类面向对象程序设计(Object Oriented Programming)。也就是我们常说OOP。...简单来说当Python没有可以完全表达我们要表示内容数据类型时,那么就需要使用一个类。来看下面的例子。 如果正在计算某人年龄,则只需使用int 因为它可以满足需求。...,但是使用函数时候,我们需要记住学生谁,成绩存储在哪里,似乎不是很困难(如果需要输出学生更多呢),但是OOP避免了这一点。...如果我们一个类只有一个函数,那么请坚持只写一个函数。 如果需要在函数调用之间保留一些状态,那么最好使用带有该函数类作为方法

63920

15分钟带你了解虚拟内存

而起意写这篇文章主要还是因为python,人工智能大浪潮下,发现好多人对这方面真的无限趋近于不知道。...希望通过这篇文章可以帮助你可以通过推理方法回答出虚拟内存各种问题,可以知道这个东西如何真正和程序结合起来。...,如何hack一个程序 本文所有的代码都很简单,只有c语言代码python代码,并且都跑过,如果你使用以下环境,应该代码都能跑起来看到结果: 一台Linux发行版机器,,一个树莓pi Python...如果你真的不知道,那么觉得还是应该去学习下内存知识以及计算机程序如何被执行起来。...剩下来想展示函数地址,所谓调用函数,其实就是执行某一个地址代码

67650

Python编程遇问题,文科生怎么办?

如果你没有良好Python编程基础,尝试应用数据科学方法时遇到了问题和困难,又不知道如何有效解决,那么这篇文章就是为你写。请务必认真阅读哟。 ?...这一大代码用空行分割,一共3个部分。前面10行第一部分。中间2行第二部分,后面第三部分。我们把它拆分成3个Jupyter代码段落,单独执行。 ? 上面的运行结果,证明我们猜测。...你命令提示符下,自己都找不到dot命令,你能指望Python有多智能呢? 怎么办?方法其实并不难,只需要加上必要路径,让电脑知道dot这个命令在哪里,就可以了。...大卫用macOS。安装Graphviz之后,mac操作系统记录下来了Graphviz各项可执行命令。Python因此也知道了dot这个命令在哪里。所以调用起来没有任何问题。...例如读完了那篇《如何Python做词云?》后,有读者微信公众号后台留言,询问我如何在绘制词云时候,把词云变成需要形状。 ? 读者想要,其实是这样效果: ?

85820

如何能正常获取17track物流网站物流信息?

格式化就可以看到上图代码,一眼看去,这代码很像我之前这篇请求网页时,怎么给我返回了一 JavaScript 代码,都是前面一个大数组,然后一个地方把这个数组顺序,然后通过一个函数来将这个数组元素来解密成正常函数名...这样子就找到生成位置了,现在就是查看右边调用栈,查看是在哪个地方开始执行,看看他们之间调用关系。 ? 3....把生成参数代码扣出来 在上面的cookie 生成可以看到一个数组,然后使用 join() 来连接起来 ? 我们可以观察这个数组在哪里生成和赋值,也通过调用栈可以看到参数生成地方在这里 ?...然后对比原文件参数 ,发现这个我们传 formdata,所以为了测试先赋值一个即可。 ? 接着这个错误,这个未定义,也是原文件中看他定义处即可。可以这样看 ?...这就是所谓内存爆破,这时因为里面有个函数检测到了你展开了代码,所以就来内存爆破,这个都是在请求网页时,怎么给我返回了一 JavaScript 代码这里得到经验,如果你需要调试寻找的话,可以先在我们扣出来代码随便写个错误

2.3K20

Rc-lang开发周记5 函数其二&OOP其一

函数VM实现 回顾 之前没有提及函数相关内容vm怎么实现,所以这里首先提及这个话题 函数实现无外乎就是调用与返回情况,这里再多加一个关于getlocal和setlocal以及计算实现部分...一些语言this相关 说到this指针,想到了两个语言 第一个Python,因为Python需要显式传递self 另一个C#,C#extension机制大概这个样子,通过这种方式来给某个类添加类函数...目前已知做法有如下几种 C++对于类似的类实例化时候会有一个一字节空间占用,为区分地址 而Rust则有一个叫ZeroSizedTypes东东,谷歌搜索时候搜索到了这样一代码 use...想这是因为Ruby一切皆对象缘故。哪怕只是一个单独函数,也是定义Kernel,本质上还是一个成员函数。...而这个initialize也是和普通成员函数一致,特别之处只是会在Objectnew中被调用,甚至和普通成员函数一样可以被外部调用 == disasm: #

30830

动画图解程序?这个可视化运行环境太方便了

所以,每当有人对自己代码没有给出预想结果而百思不得其解,无奈寻求帮助时,都会建议程序增加输出,一方面根据不同输出先后顺序来判断程序运行路径,另一方面则是观察各变量在运行过程实际数值,确认在哪里发生了错误...理解每一行源代码程序执行时计算机过程。...、列表、函数、模块代码片段。...看看效果如何: 左边代码,箭头表示当前运行到位置。 通过下面的按钮和进度条可以直接控制程序进行。 右上输出。 右下就是程序可视化模拟。...在这个例子里,可以清楚地看到过程变量变化,何时调用函数等信息。 借助 Python Tutor,除了可以让编程新手更容易理解程序运行过程,还能可视化地展示算法执行,如排序、链表插入等。

25110

笨办法学 Python3 第五版(预览)(二)

这意味着x = x + y与x += y相同。 readline() 如何知道每行在哪里?...确保你知道如何做到这一点,如果不知道,可以回顾练习 0 中学习如何从终端运行 Python 代码将教你如何研究一代码以揭示其秘密。...有了这个想法,让我们逐行分解ex22.py代码: 1-2 从你已经了解常规命令行参数处理开始。 5 一个方便命名为main函数开始这段代码主要部分。这将在脚本末尾调用以启动事务。...当这是假时候,Python 将跳过 9-10 行。 9 然后调用一个单独函数来实际打印这一行。这简化了代码,使更容易理解它。如果想了解这个函数作用,可以跳转到它并进行研究。...一旦知道print_line做什么,就可以将我记忆与名称print_line联系起来,然后忘记细节。 10 在这里写了一小强大魔法。main函数内部再次调用main。

13110

程序员应如何理解高并发协程

注意这段代码python,但本篇关于协程讨论适用于任何一门语言,因为协程并不是一种语言特性。而我们只不过恰好使用了python来用作示例,因其足够简单。 那么协程是什么呢?...,但是协程下当执行完print("a")后func就会因“暂停并返回”这段代码返回到调用函数。...从图中我们可以看到,我们首先来到funcA函数,执行一时间后发现调用了另一个函数funcB,这时控制转移到该函数,执行完成后回到main函数调用点继续执行。 这是普通函数调用。 接下来协程。...在这里,我们依然首先在funcA函数执行,运行一时间后调用协程,协程开始执行,直到第一个挂起点,此后就像普通函数一样返回funcA函数,funcA函数执行一些代码后再次调用该协程,注意,协程这时就和普通函数不一样了...我们需要做就是堆区申请一空间,让后把协程整个栈区保存下,当需要恢复协程运行时再从堆区copy出来恢复函数运行时状态。 再仔细想一想,为什么我们要这么麻烦来回copy数据呢?

90820

你做 9 件事表明你不是专业 Python 开发人员

I am 22 years old 二、使用默认可变参数 Python ,只要您将可变值作为参数传递给函数,默认参数就会在函数调用时发生变化。...// 第二次调用 >>> l2 = append(1) >>> l2 [0, 1] ❝ 简而言之也就是说由于 l append 函数中被默认初始化为一个 list,第二次调用时,l 并没有重置,导致返回时还带有第一次调用结果...使用 import * 导入会破坏您命名空间,方法将该命名模块所有函数和类导入您代码,这可能会与您定义函数或导入其他库函数发生冲突。...九、不关注 pep8 ❝ pep8就是Python官方指定编码规范 ❞ 我们大多数人都犯了这个罪, ❝ 承认有罪 被取消之前,知道在这篇文章一些代码可能违反了 PEP-8 规则,但事实是痛苦...❝ 老外这篇文章 medium 邮件推荐,可能老外知道自己这篇文章示例代码也违反了 pep8 规范,怕被取消推荐了,,不保真。

21020

深入浅出理解闭包

上一篇我们讲到全局环境下代码,执行上下文环境中有如何数据: 变量、函数表达式——变量声明,默认赋值为undefined; this——赋值; 函数声明——赋值; 如果在函数,除了以上数据之外,...执行代码之前,首先将创建全局上下文环境。 image.png 然后代码执行。代码执行到第12行之前,上下文环境变量都在执行过程中被赋值。 image.png 执行到第13行,调用bar函数。...image.png 好了,很耐心给大家介绍了一简短代码执行上下文环境变化过程,一个完整闭环。其中上下文环境变量赋值过程我省略了许多,因为那些并不难,一看就知道。...对于本文第一代码fn函数,取自由变量x值时,要到哪个作用域中取?——要到创建fn函数那个作用域中取——无论fn函数在哪调用。 上面描述只是跨一步作用域去寻找。...另外,对于函数来说,上下文环境调用时创建,这个很好理解。拿参数做例子,你不调用函数哪儿知道你要给我传什么参数? 8.2. 作用域: 首先,它很抽象。

70420

如何Python 和 API 收集与分析网络数据?

14个组,有一多半都和他们一样,做维基百科页面访问量分析。 为什么会这样呢? 因为布置作业时候,很贴心地给了一个样例,之前写一篇教程《如何用R和API免费获取Web数据?》。...就好像你要去见朋友,总得知道见面的地址在哪里; 请求方式:本例 GET ,利用 HTTP 协议请求传递数据主要形式之一; 请求参数:这里你要提供两个信息给 API 接口,一“地区名称”或者“地区...但是,样例,样例在哪里呢? Python编程遇问题,文科生怎么办?》一文曾经提到过,这种样例,对于普通用户重要性。 没有“葫芦”,他们又如何“照葫芦画瓢”呢?...既然这个例子,官方文档没有提供如此详细代码和讲解样例,那我就来为你绘制个“葫芦”吧。 下面,给你逐步展示,如何Python 3 下,调用该 API 接口,读取、分析数据,和绘制图形。...它是一个字典,每一项分别包括城市代码,和对应城市名称。 根据我们输入城市代码函数就可以自动结果数据框添加一个列,注明对应哪个城市。

3.3K20

AsyncTask源码分析

先有一个问题,call()方法在哪里会被调用呢?其实是mFuture内部run()方法调用mWorker他call方法。具体代码读者可以自行查找项目源码,这里就不多说了。...结合上面的执行流程图我们知道经过上面7个步骤异步任务一个一个在线程池中被完成。既然我们知道了AsyncTask大致执行过程,那么它是如何将执行结果返回到主线程呢?下面我们将会来分析。...执行结果如何被传递到主线程 我们知道doInBackground()函数我们任务具体执行函数。...这个函数WorkerRunnablecall()函数中被调用,从上面的执行过程介绍我们知道call()方法FutureTaskrun方法执行时候被调用。...既然消息发送出去了,那么消息在哪里执行呢?答案InternalHandler类handleMessage()中被执行。why?

76420

【瑞数】维普期刊JS逆向详细流程

中场休息 分析到这里,我们知道了签名生成流程如下: 当用户点击搜索按钮,触发点击事件; 构建请求对象(请求对象参数没有签名关键字); 由于 send 方法被修改,所以调用 send 方法时,签名就在这个过程中被生成...; 签名代码来源分析 其实你应该发现了,分析了这么久 JS 代码,却不知道这大段 JS 存放在哪里?...换句话说就是,这些 JS 代码并不是存在一个 JS 文件里,实际上通过 eval 函数将一大堆字符串加载进了内存。 ? 此时就需要寻找以上 JS 代码如何加载进内存。...---- 签名代码何处加载到内存? 仔细想一想,一字符串想以 js 代码形式加载进内存,必定会使用 eval 方法。 所以,我们只需要找到哪里使用了调用 eval 即可。...实际情况使用 python 来完成代码注入。 画个图来说明下,即使用 Python 修改 html 源码,使得 html js 代码能过将目标代码注入到签名代码 ?

2.8K20

从根上理解高性能、高并发(五):深入操作系统,理解高并发协程

注意这段代码python,但本篇关于协程讨论适用于任何一门语言,因为协程并不是某种语言特有的。而我们只不过恰好使用了python来用作示例,因其足够简单。 那么协程是什么呢?...,但是协程下当执行完print("a")后func就会因“暂停并返回”这段代码返回到调用函数。...接下来协程: 在这里:我们依然首先在funcA函数执行,运行一时间后调用协程,协程开始执行,直到第一个挂起点,此后就像普通函数一样返回funcA函数,funcA函数执行一些代码后再次调用该协程。...我们需要做就是:堆区申请一空间,让后把协程整个栈区保存下,当需要恢复协程运行时再从堆区copy出来恢复函数运行时状态。 再仔细想一想,为什么我们要这么麻烦来回copy数据呢?...我们知道:而线程调度操作系统中进行,而协程调度则是在用户空间进行开发人员通过调用系统底层执行上下文相关api来完成

66731
领券