对Python动态类型语言解析

开发 后端
Python动态类型语言和线程安全很多人不是很了解,通过本文,希望能让大家对Python的GIL等内容有所帮助,本文还将就主要谈下笔者对线程安全的一些理解。

其实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. <type 'list'>   
  4.  
  5. >>>import sys   
  6.  
  7. >>> type(sys)   
  8.  
  9. <type 'module'>   
  10.  
  11. >>> type(dir)   
  12.  
  13. <type '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和线程安全
责任编辑:chenqingxiang 来源: 博客园
相关推荐

2010-02-23 14:55:00

Python动态语言

2017-09-13 00:07:05

Python编程语言动态语言

2010-03-23 09:16:43

Python源码剖析

2011-08-22 09:34:50

Objective-C多态动态类型

2014-12-23 09:34:47

动态语言

2010-03-01 14:28:46

Python进程

2010-02-22 10:18:29

Python代码

2020-08-31 19:17:24

Python强类型语言弱类型语言

2012-03-26 10:06:13

语言开发

2010-03-01 18:21:08

Python测试

2010-02-23 10:44:00

Python 编程语言

2010-02-26 10:07:55

Python编程语言

2010-03-17 16:50:51

2010-03-01 14:02:26

Python批处理语言

2010-02-26 14:50:17

Python操作语言

2021-07-21 09:15:57

Python工具编程语言

2010-02-23 15:29:43

Python 编辑器

2010-02-24 09:18:15

Python操作语言

2010-02-23 16:46:27

Python设计语言

2010-07-08 10:03:39

动态语言PythonRuby
点赞
收藏

51CTO技术栈公众号