打印“f1”
定義f2():
打印“f2”
profile.runctx("f2()"、globals()、locals())
& gt& gt& gtf1()
f1
第二子代
0.000 CPU秒內4次函數調用
排序依據:標準名稱
n調用總時間百分比調用累計時間百分比調用文件名:行號(函數)
1 0.000 0.000 0.000 0.000:0(set profile)
1 0.000 0.000 0.000 0.000 & lt;stdin & gt:3(f2)
1 0.000 0.000 0.000 0.000 & lt;字符串& gt:1(?)
1 0.000 0.000 0.000 0.000配置文件:0(f2())
0 0.000 0.000配置文件:0(探查器)
看壹下profile.py的源代碼
類別剖面法
定義運行(self,cmd):
導入__main__
dict = __main__。__詞典_ _
return self.runctx(cmd,dict,dict)
def runctx(self,cmd,globals,locals):
self.set_cmd(cmd)
sys.setprofile(self.dispatcher)
嘗試:
全局、局部中的執行命令
最後:
sys.setprofile(無)
回歸自我
可以看到,在run方法中,只有__main__的上下文,也就是說,妳只能知道全局上下文中定義的變量,而妳使用嵌套函數後,f2只是函數f1的局部變量,在__main__的環境中沒有f2,所以存在執行錯誤。
在使用profile.runctx ("F2()"、globals()、locales())時,將f1的全局變量和區域設置賦予runctx,使其能夠正確執行。