动态类型无处不在

未匹配的标注

当然,不需要真的画出带有圆圈和箭头的名称/对象图来使用Python。然而,当开始学新知识时,如果像我们这里做的那样可以跟踪变量的引用结构,那么这个图有时会帮助理解不常见的情况。比如,如果当一个可变对象在程序中传递时,如果它意外改变,很可能你正在亲眼见证本章的一些主题。

而且,即使动态类型在目前看起来有点抽象,但最终仍可能关注它。因为在Python中一切似乎都是通过赋值与引用来工作的,对此模型的基本理解在许多不同的场景都有用。将看到:在赋值语句,函数参数,for 循环变量,模块导入,类属性等等都是一样的。好消息是在Python中只有一个赋值模型;一旦掌握了动态类型,将发现在语言的每一个地方都是一样的。

在最实用的层次上,动态类型意外着编写更少的代码。然而,同样重要的,动态类型也是Python的多态(在第4章中引入的一个概念,在本书后面将再次复习)的基础。因为在Python代码中不限制类型,所以动态类型是精确和高度灵活的。将看到:当使用得好时,动态类型——和它所暗示的多态——会生成随系统发展的自动适应新需求的代码。


“弱”引用

在Python世界,可能有时会看到属于“弱引用”。这是一个有点高级的工具,但它和这里探索的引用模型有关,而且和is操作符一样,如果不理解引用模型就不能真正的理解它。

简而言之,弱引用,被weakref标准库模块实现,是一个对象引用,它不能单独阻止被引用对象被垃圾回收。如果对象的最后剩下的引用是弱引用,对象会被回收,它的弱引用会被自动删除(否则会被通知)。

举个例子,这(弱引用会被自动删除)在大对象的基于字典的缓存中是很有用的;否则,单是这个缓存的引用就会无限地把对象保持在内存中。然而,这真的只是引用模型的一个特殊情况的扩展。要获得更多细节,参考Python的库手册。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~