概述
刚接触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 变量作用域问题 函数名.变量名的全部内容,希望文章能够帮你解决Python 变量作用域问题 函数名.变量名所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复