def foo():
print 'foo'
def bar():
foo()
def run():
foo()
1
Septembers 2015 年 5 月 21 日
不能
(理论可以通过动态分析bytecode完成(恩 我没测试过 |
2
arbipher 2015 年 5 月 21 日 被什么函数调用可以知道,参考
https://docs.python.org/2/library/inspect.html http://stackoverflow.com/questions/900392/getting-the-caller-function-name-inside-another-function-in-python 第几次被调用据我所知没有,等大神来回答吧。你加个count或者用闭包试试。 |
3
vicalloy 2015 年 5 月 21 日
我觉得你还是给foo加个参数吧
|
4
zerh925 OP 刚dir了一下任意函数,发现一个func_name属性。通过传这个参数给foo()算是实现了。
```python def foo(outer): print "I was called by ", outer def bar(): foo(bar.func_name) def run(): foo(run.func_name) ``` 还有更好的办法吗? |
5
9hills 2015 年 5 月 21 日 |
7
9hills 2015 年 5 月 21 日 |
8
muzuiget 2015 年 5 月 21 日 可以的,用这个模块 https://docs.python.org/2/library/traceback.html
我最常用的 import traceback; traceback.print_stack() 打印当前的调用栈,其实就是相当于出现错误时的信息。 |
9
songco 2015 年 5 月 21 日
支持stacktrace的都可以把...
|
10
recall704 2015 年 5 月 21 日
就二楼哪个方法吧,之前也是用的那个方式.
|
11
alexapollo 2015 年 5 月 21 日 每个语言的月经贴。记住关键字:stacktrace/backtrace,加上语言python/c/java,google一搜就有。
授人以渔! |
12
monkeylyf 2015 年 5 月 21 日
>>> import inspect
>>> inspect.stack() |
13
staticor 2015 年 5 月 21 日 我以前在leetcode还是codewars好像见过类似的统计函数被第几次调用的 提供一个可能有帮助的代码
 |
14
staticor 2015 年 5 月 21 日
|
15
WKPlus 2015 年 5 月 21 日 查找caller上面很多人说过了,我用过一个方法来统计这个函数被调用多少次:
def foo(called=[0]): called[0] += 1 # called[0]记录了foo被调用了多少次 #your code here 总算发现了python函数default值这个坑的第二个用法了:) 当然也可以用函数属性来完成这个工作,不过要在foo函数定义之外再初始化一次这个属性,感觉没上面的代码好玩~ |
17
jedihy 2015 年 5 月 22 日
几乎所有语言都能打调用栈啊
|