日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Python 变量作用域问题 函数名.变量名

發布時間:2024/1/8 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 变量作用域问题 函数名.变量名的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。