def createPlot():
fig = plt.figure(1, facecolor='white')
fig.clf() # 清除图上数据
createPlot.ax1 = plt.subplot(111, frameon=False) ##这个变量为什么是全局的? *.*这种命名是怎么回事
plotNode('decision Node', (0.5, 0.1), (0.1, 0.5), decisionNode)
plotNode('leaf Node', (0.8, 0.1), (0.3, 0.8), leafNode)
plt.show()
在学习《机器学习实战》这本书,看到里面有个变量是createPlot.ax1,似乎把函数当做类来用,感觉有点奇怪,求高手指点一下,或有没有相关的资料?(不知道这种该怎么查了……
其实这个问题很简单
动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。
那么动态创建有一个必然的条件就是需要对自身进行进一步的抽象处理,来声明当前创建的对象。
所以说为什么python里面一切都是对象呢?就是上面这个原因。所有的抽象处理都是基于元类处理--
type
。python中一切的对象都可以用
type()
解析,也有以下的一些funcobj.__name__, obj.__dict__
。那么也就不难理解为什么
createPlot.ax1
这样的写法。无非就是声明了对象的一个属性或变量而已。createPlot.__dict__
就可以看到当前对象包含属性或变量{'ax1': 1}