对Python动态类型语言解析
创始人
2024-06-22 12:21:41
0

其实Python动态类型语言与C++的性质非常相似,有些变化引起的错误却很严重,本文就对于大多数用户头疼的Python动态类型语言进行详细的剖析与介绍,仅供大家学习思考。

Python的创始人是Guido van Rossum,在发明Python语言之前Guido曾参与过一门称作ABC的语言的设计,ABC是专门为非专业程序员设计的;Guido在Python 语言的设计过程中吸收了ABC语言的许多优点。

诸如ABC的数据类型(列表、元组、文本等),变量无需声明,内建的功能强大的字符串处理以及简单的控制结构等特性;同时摒弃了ABC语言的一些缺陷,其中最主要的就是使Python更易扩展。

这也是Python语言现在如此流行的原因之一,Python的第一个实现是在mac机上,Python语言的设计还受到Modula-3(另一种优美强大的语言)的影响,并结合了Unix Shell和C的习惯。#t#

现在Python是OpenSource的项目,同时Python社区非常的活跃,极大促进了Python动态类型语言的发展。目前 Python语言最新的版本是2.4.2。 Python的特性 Python是面向对象的,跨平台的,可扩展的解释型通用编程语言,它支持模块和包;Python的代码类型有三种:.py .pyc .pyo,分别是字节代码。

二进制代码,优化代码,都可以直接运行,无需编译或者链接的步骤,而且Python还提供交互执行环境;Python动态类型语言,不需要类型声明;提供自动内存管理;内置高级数据类型和操作支持;Python可扩展,可嵌入;语法简单清晰,强调代码可读性;可动态加载C模块;可动态装载Python模块;

Python属动态语言,允许在程序运行期间动态添加删除函数,对类和实例可以在运行时动态添加修改方法;Python 是具有内省性的语言;提供标准的GUI框架开发图形界面程序;支持标准Internet协议;支持内建的和第三方提供的库,丰富的库支持;免费使用且完全开放源代码。

  1. >>> type([])   
  2.  
  3.  'list'>   
  4.  
  5. >>>import sys   
  6.  
  7. >>> type(sys)   
  8.  
  9.  'module'>   
  10.  
  11. >>> type(dir)   
  12.  
  13.  'builtin_function_or_method'>   
  14.  
  15. hasattr()函数和getattr()函数检索一个对象拥有的属性   
  16.  
  17. >>> import os   
  18.  
  19. >>> hasattr(os.dup, '__doc__')   
  20.  
  21. True   
  22.  
  23. >>> print getattr(os.dup, '__doc__')   
  24.  
  25. dup(fd) -> fd2   
  26.  
  27. Return a duplicate of a file descriptor.   
  28.  
  29. callable()函数测试对象的可调用性:   
  30.  
  31. >>> callable('string')   
  32.  
  33. False   
  34.  
  35. >>> callable(callable)   
  36.  
  37. True   

Python动态类型语言不提供显式的内存分配回收API,完全自动的内存管理;Python memory manager实现了对程序运行时堆的管理,包括内存的分配,垃圾回收机制等;垃圾回收(garbage collection,一下简称GC)在当前的版本中使用的是引用计数垃圾收集和可选的循环结构垃圾空间扫描技术。

一旦对象变得‘不可达’的时候就会被回收,但是不保证能够回收包含循环引用计数的内存垃圾。引用计数的算法比较直观:在每个存储片中记录了指向其的指针数目;在对存储片进行某些操作时,对引用计数进行更新。

分配一个存储片时引用计数初始化为1,只要存储片的引用被复制,引用计数加1,存储片的引用被删除时,引用计数减1,如果引用计数减为0,则存储片会由于不可达而被回收。很明显引用计数算法不能回收循环的数据结构;设想一个简单的场景:对象a一个成员指向对象b,同时b也有一个成员指向a,而且代码中只有引用a的部分。

b对象只是辅助a对象而生成的,如果后来a对象被删除了,那么a和b作为一个整体都变成内存垃圾了,理论上应该都被内存管理器删除,但是由于引用计数算法每次只考察一个结点,因此对于循环的数据结构无法回收。所以在编程时应尽量避免循环引用的情况出现。

【编辑推荐】

  1. 如何使Python嵌入C++应用程序?
  2. 深入探讨Ruby与Python语法比较
  3. Python学习资料介绍分享
  4. Python学习经验谈:版本、IDE选择及编码解决方案
  5. 浅析Python的GIL和线程安全

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...