def
classify
(inputtree, featlabels, testvec)
:"""
在實際資料集中改屬性儲存在哪個位置? 是第乙個屬性還是第二個屬性?
:param inputtree:
:param featlabels:
:param testvec:
:return:
"""firststr =
list
(inputtree.keys())
[0] seconddict = inputtree[firststr]
# 將標籤字串轉換為索引, 使用index方法查詢當前列表中第乙個匹配firststr變數的元素
featindex = featlabels.index(firststr)
for key in seconddict.keys():
# 比較testvec變數中的值與樹節點的值
if testvec[featindex]
== key:
iftype
(seconddict[key]
).__name__ ==
'dict'
: classlabel = classify(seconddict[key]
, featlabels, testvec)
else
:# 如果到達葉子節點,返回當前節點的分類標籤
classlabel = seconddict[key]
return classlabel
第一次classlabel = classify(seconddict[key]), featlabels, testvec)呼叫了一次classlabel返回了classlabel 給了等號左邊的classlabel,
第二次return classlabel給了主程式的呼叫處
儲存當前指令位址
跳轉到被呼叫函式(指令段)的起始位址實際過程比這個複雜, 比如還包括儲存臨時變數和傳參等等, 但是對我們正在討論的問題不起到本質影響所以省略掉不談
函式遞迴呼叫
我們學習了函式的巢狀呼叫,可以在函式中呼叫函式。那麼,如果在乙個函式中,呼叫自己這個函式,那麼,這個執行過程稱為 函式遞迴呼叫。這個函式也稱為 遞迴函式。程式測試例子 程式執行結果如下 在這個測試例子中,我們定義了func函式,在func函式中又呼叫了func函式自己 所以,這個過程稱為 遞迴呼叫。...
spring quartz 多次呼叫
早上測試程式的時候,發現專案下的定時任務quartz同一時刻有乙個任務執行了兩次,但是我清楚地記得原來是沒有問題,很是懊惱。第一步 檢查配置檔案,檔案內有配置concurrent為false,理論上來講應該可以防止job同時執行兩次的問題。work false 0 0 2 第二步 既然不是quart...
函式的遞迴呼叫
乙個函式在它的函式體內呼叫它自身稱為遞迴呼叫。這種函式稱為遞迴函式。c語言允許函式的遞迴呼叫。在遞迴呼叫中,主調函式又是被調函式。執行遞迴函式將反覆呼叫其自身。每呼叫一次就進入新的一層。例如有函式f如下 int f int x 這個函式是乙個遞迴函式。但是執行該函式將無休止地呼叫其自身,這當然是不正...