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

望高手解答!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值