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