刚接触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 变量作用域问题 函数名.变量名相关推荐

  1. golang常用手册:数组、变量作用域、函数

    学习是一个趁热打铁的过程,高效的学习能提高大脑反应.所以我们接着了解go语言的数组.变量作用域.函数. 数组 和其他语言申明类似:var variable_name [SIZE] variable_t ...

  2. Python 变量作用域与函数(4)

    Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...

  3. python类中变量作用域_python进阶14变量作用域LEGB

    作用域 "作用域"定义了Python在哪一个层次上查找某个"变量名"对应的对象.接下来的问题就是:"Python在查找'名称-对象'映射时,是按照什么 ...

  4. python类中变量作用域_Python中的变量作用域

    1.块级作用域 1 if 1 == 1:2 name = "lzl" 3 4 print(name) //输出lzl5 6 7 for i in range(10):8 age = ...

  5. python3_函数_形参调用方式 / 不定长参数 / 函数返回值 / 变量作用域 / 匿名函数 / 递归调用 / 函数式编程 / 高阶函数 / gobal和nonlocal关键字 / 内置函数

    1.形参的调用方式 1. 位置参数调用 2. 关键词参数调用 原则: 关键词参数调用不能写在位置参数调用的前边 def test1(name, age):print("name:" ...

  6. python变量作用域和生存期_变量的生存期和作用域

    变量的生存期和作用域是个很基础但又很重要的问题,所以我打算写几百字重温一下. 变量的生存期是指变量在什么时间段存在. 变量的作用域是指变量在哪些代码块中能够被访问. 一般来说变量生存期包含作用域.即在 ...

  7. python变量作用域图解_python的变量作用域问题

    偶然掉进了一个坑里.仔细分析了下原因.原来是变量作用域的问题.简单抽象如下: id=1 #许多行代码 [id for id in range(10)] #许多行代码 if id!=1: #做一些事情 ...

  8. python导入模块中函数或者变量的方法

    1.导入整个模块中的函数和变量,代码: >创建模块say_hello.py文件: #file:say_hello.py def say_hi():print("hello,I'm IS ...

  9. python学习笔记1-print()函数与变量+数据类型与转换+条件判断与条件嵌套+input()函数

    print()函数与变量 1.基本句式 print('千寻') 2.引号的用法 3.转义字符 print('let\'s go') 4.变量和赋值 5.小结 数据类型与转换 字符串 整数 浮点数 数据 ...

最新文章

  1. 第十七届智能车竞赛英飞凌专题培训 ——四轮摄像头组入门讲解
  2. 关于动态添加页面(iframe + mhtml)
  3. Linux下的I/O复用与epoll详解(ET与LT)
  4. 选择用 Java 开发 GUI:
  5. TCP之1460MSS和1448负载
  6. Jquery 实现动态加入table tr 和删除tr 以及checkbox的全选 和 获取加入TR删除TR后的数据...
  7. javascript的dom选择器
  8. 皮肤暗的女孩如何穿衣服
  9. 15b万用表怎么测电容_怎么判断启动电容好坏_启动电容怎么测量好坏_数字万用表测电容好坏...
  10. 提升营业额的正确方法
  11. 【NVIDIA Jetson TK1】一,开发板重装ubuntu系统,重新刷机,重新烧系统,恢复系统
  12. 基于SGIP协议的短信网关接口
  13. 【超详细】磁力计数据读取--以IST8310为例
  14. java多线程-线程的停止【interrupt】
  15. 【暑期每日一题】洛谷 P6320 [COCI2006-2007#4] SIBICE
  16. pandas笔记1 --pandas处理mat表格文件
  17. ORACLE数据库 自动备份 定时计划任务 windows
  18. Microsoft Excel 出现错误。很抱歉,您的Office安装无法正常工作,请使用控制面板中的“程序与功能”选项修复您的产品。您也可以联机查找更多帮助。
  19. FIFO学习:FIFO深度的计算、通过Verilog实现FIFO以及利用SRAM设计FIFO
  20. 干货!重新思考希尔伯特-施密特信息瓶颈在对抗性鲁棒性中的应用

热门文章

  1. 【ArcGIS微课1000例】0052:创建地理数据库注记(标准注记、要素关联注记、尺寸注记)
  2. 计算机显示屏知识,计算机配置知识之显示屏
  3. 火红色枫叶背景《你好秋天》秋分节气 PPT模板
  4. Ps编程脚本开发零基础学脚本(一)
  5. 喜讯 | 哈特公寓荣誉获最佳新锐公寓奖
  6. 先进制造技术论文_轴承先进锻造工艺及制造技术
  7. 如何在wsl中安装kotlin编译器(简单有效)
  8. Linux 系统时间 EST 改 CTS
  9. (二)验证码模块(随机英文验证and随机英文数字混合验证+Session)
  10. 三型两步验证登不上_苹果手机开启了双重认证,未信任的设备之前登入了,开启了双重认证未...