学习Python语言时要确定Python是动态语言,所谓动态语言,现在大致认同的一个定义是:程序运行期间允许改变程序结构或者变量类型,Python直接编写的程序段有时运行效率甚至高于用C编写的程序。
Guido在Python 语言的设计过程中吸收了ABC语言的许多优点,诸如ABC的数据类型(列表、元组、文本等),变量无需声明,内建的功能强大的字符串处理以及简单的控制结构等特性;
同时摒弃了ABC语言的一些缺陷,其中最主要的就是使学习Python语言更易扩展,这也是Python语言现在如此流行的原因之一。Python的第一个实现是在mac机上,Python语言的设计还受到Modula-3(另一种优美强大的语言)的影响,并结合了Unix Shell和C的习惯。
现在Python是OpenSource的项目,同时Python社区非常的活跃,极大促进了Python语言的发展。目前 Python语言最新的版本是2.4.2。 Python是面向对象的,跨平台的,可扩展的解释型通用编程语言,它支持模块和包;Python的代码类型有三种:.py .pyc .pyo。
分别是字节代码,二进制代码,优化代码,都可以直接运行,无需编译或者链接的步骤,而且Python还提供交互执行环境;Python是动态类型语言,不需要类型声明;提供自动内存管理;内置高级数据类型和操作支持;Python可扩展,可嵌入;
语法简单清晰,强调代码可读性;可动态加载C模块;可动态装载Python模块;Python属动态语言,允许在程序运行期间动态添加删除函数,对类和实例可以在运行时动态添加修改方法;Python 是具有内省性的语言;提供标准的GUI框架开发图形界面程序;支持标准Internet协议;支持内建的和第三方提供的库,丰富的库支持;免费使用且完全开放源代码。
除了这些内置高级数据类型,程序员还可以通过扩展模块自定义内置数据类型以支持实际应用;Python属动态类型语言。这是大部分脚本语言的特性:通过赋值决定或改变变量类型;Python使用缩排标识程序块结构,这是Python的一大特色,减少了不必要的块包围符号;
str、unicode、list、 tuple等类可以通过乘法实现多个容器的组合,可以通过分片进行分割,还能够负索引表示从后向前查找;学习Python语言不提供显式的内存分配回收API,完全自动的内存管理;Python memory manager实现了对程序运行时堆的管理,包括内存的分配,垃圾回收机制等;
垃圾回收(garbage collection,一下简称GC)在当前的版本中使用的是引用计数垃圾收集和可选的循环结构垃圾空间扫描技术。一旦对象变得‘不可达’的时候就会被回收,但是不保证能够回收包含循环引用计数的内存垃圾。引用计数的算法比较直观:在每个存储片中记录了指向其的指针数目;
在对存储片进行某些操作时,对引用计数进行更新,分配一个存储片时引用计数初始化为1,只要存储片的引用被复制,引用计数加1,存储片的引用被删除时,引用计数减1,如果引用计数减为0,则存储片会由于不可达而被回收。
很明显引用计数算法不能回收循环的数据结构;设想一个简单的场景:对象a一个成员指向对象b,同时b也有一个成员指向a,而且代码中只有引用a的部分,b对象只是辅助a对象而生成的。
如果后来a对象被删除了,那么a和b作为一个整体都变成内存垃圾了,理论上应该都被内存管理器删除,但是由于引用计数算法每次只考察一个结点,因此对于循环的数据结构无法回收。所以在编程时应尽量避免循环引用的情况出现。
【编辑推荐】