100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Python 变量作用域问题 函数名.变量名

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

时间:2018-10-27 19:36:54

相关推荐

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,具体什么原因,也不太清楚。

望高手解答!



本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。