Python 变量作用域问题 函数名.变量名
剛接觸Python,主要想利用它做數據處理。我用的是Python2.7.5,win7系統
最近在看《機器學習實戰》,第三章決策樹中有一段代碼,摘抄如下,對于用顏色標注部分,剛開始沒看懂什么意思。
def plot_tree(mytree, parent_pt, node_txt):
???? num_leafs = get_num_leafs(mytree)
??? depth = get_tree_depth(mytree)
???? first_str = mytree.keys()[0]
??? cntr_pt = (plot_tree.xOff + (1.0 + float(num_leafs))/2.0/plot_tree.totalW,
??? plot_tree.yOff)
??? plot_mid_text(cntr_pt, parent_pt, node_txt)
??? plot_node(first_str, cntr_pt, parent_pt, decision_node)
??? second_dict = mytree[first_str]
??? plot_tree.yOff = plot_tree.yOff - 1.0/plot_tree.totalD
??? for key in second_dict.keys():
??????? if type(second_dict[key]).__name__ == 'dict':
??????????? plot_tree(second_dict[key], cntr_pt, str(key))
??????? else:
??????????? plot_tree.xOff = plot_tree.xOff + 1.0/plot_tree.totalW
??????????? plot_node(second_dict[key], (plot_tree.xOff, plot_tree.yOff),
??????????? cntr_pt, leaf_node)
??????????? plot_mid_text((plot_tree.xOff,plot_tree.yOff), cntr_pt, str(key))
??? plot_tree.yOff = plot_tree.yOff + 1.0/plot_tree.totalD
#繪圖,相當于主函數
def create_plot(intree):
??? fig = plt.figure(1, facecolor='white')
??? fig.clf()
??? axprops = dict(xticks=[], yticks=[])
??? create_plot.ax1 = plt.subplot(111,frameon=False, **axprops)
????plot_tree.totalW = float(get_num_leafs(intree))
??? plot_tree.totalD = float(get_tree_depth(intree))
??? plot_tree.xOff = -0.5/plot_tree.totalW
??? plot_tree.yOff = 1.0
??? plot_tree(intree, (0.5,1.0), '')
??? plt.show()
最后想了想,在主函數中,以這樣的方式(函數名.變量名)聲明并賦值,如上例中plot_tree.xOff。而在子函數plot_tree()中,此變量plot_tree.xOff可直接使用,即使再有一個子函數并在主函數中調用,該變量也可直接使用。但是python中變量命名方式為字母,下劃線,數字。而plot_tree.xOff并不能算是一個變量。搞不懂!
或者以如下這種方式也可以使用。
def t1():
??? t.var = 3
def t2():
??? var = t.var +3
??? print 't2---? var = ',var
運行:
t1()
t2()
輸出結果為:t2---?? var =? 6
但是,在上述代碼中,t.var中的t,我是隨意寫的,并不是一個函數名。而且這兩個函數t1(),t2()并沒有相互調用關系。搞不懂!
之前,看到一位前輩的博客介紹python變量作用域,能改變python變量作用域的代碼段有def,class,lamda。似乎不適用此種情況。
剛接觸Python,具體什么原因,也不太清楚。
望高手解答!
總結
以上是生活随笔為你收集整理的Python 变量作用域问题 函数名.变量名的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac修改默认的电子邮箱客户端
- 下一篇: 迷惑新手的IOS开发问题