python核心编程笔记chapter1

来源:互联网 发布:网络著作权侵权行为 编辑:程序博客网 时间:2024/06/07 14:21

一、Python特点

1、高级

   Python是一种解释型脚本语言。在C语言中,对于混杂数组和哈希表没有相应的标准库,所以他们经常被重复实现,并被复制到每个新项目中取。这个过程混乱而且容易产生错误。C++使用标准模板库改进了这种情况,但是很难与Python内建的列表和字典的简洁和易读相提并论。

2、面向对象

  面向对象编程支持将特定的行为、特性以及和功能与他们要处理或所代表的数据结合在一起。Python不像Java或Ruby仅仅是一门面向对象语言,事实上它融汇了多种编程风格,甚至借鉴了Lisp和Haskell这两种语言的特性。

3、可升级

  大家常将Python与批处理或Unix系统下的Shell相提并论。但是shell脚本功能不够多,且代码的重用度较低,因此只能止步于小项目。而Python却比较简介,而且能添加额外的新的或现存的Python元素,增加代码的重用性。Python提倡简洁的代码设计、高级的数据结构和模块化的组件,这些特点可以让你在提升项目的范围和规模的同时,确保灵活性、一致性并缩短必要的调试时间。

4、可扩展

  可以将Python分离为多个文件或模块,还可以从一个模块选取代码,从另一个模块中读取属性。而且,对于所有模块,Python的访问语法都是相同的。此外,对于特别强调性能的地方可用C编写,而且这些接口和纯Python模块的接口是一摸一样的。Python的标准库是使用C语言完成的(也就是CPython),所以要使用C和C++编写Python扩展,Python的java实现被称作Jython,要使用Java编写其扩展。最后是IronPython,这是针对.NET或Mono(跨系统的.net开源项目)平台的C#实现,还可以使用C#或VB.NET扩展IronPython.

5、可移植性

  因为Python是用C写的,又由于C的移植性,所以Python也可以允许在任何带有ANSI C编译器的平台上,既适用于不同的架构,也适用于不同的操作系统。

6、易学

  Python关键字少、结构简单、语法清晰。

7、易读

  Python与其他语言的显著差异是,没有其他语言通常用来访问变量、定义代码块和进行模式匹配的命令式符合。如:$ ; ~等

8、易于维护

  Python项目的成功很大程度上归功于其源代码的易于维护,因为Python易于学习和阅读。

9、健壮性

  Python提供“安全合理”的退出机制,让程序员能掌控局面,一旦你的Python由于错误崩溃,解释程序就会转出一个“堆栈跟踪”,那里面有可用到的全部信息,包括你程序崩溃的原因以及是哪段代码出错了。这些错误被称为异常。如果运行时发生这样的错误,Python使你能够监控这些错误并进行处理。

10、高效的快速原型开发工具

  我们之前提到了Python的易学易读,但是你可能会问,BASIC也是如此啊,Python有什么出类拔萃呢?与那些封闭僵化的语言不通,Python有许多面向其他系统的接口,他的功能足够强大,本身也足够强壮,所以完全可以使用Python开发整个系统的原型。且比其他语言简洁很多。此外,Python开发出很多扩展库,可以作用“即插即用”。

11、内存管理器

  C或C++最大的弊病在于内存管理使由开发者负责的。所以哪怕是对于一个很少访问、修改和管理内存的应用程序,程序员也必须在执行了基本任务之外履行这些职责。太过费时费力。而在Python中,内存管理使由Python解释器负责的,所以开发人员就可以从内存事务中解放出来,全省关注与最直接的目标,仅仅致力于开发计划中首要的应用程序,这会使错误更少、程序更健壮、开发周期更短。

12、解释性和(字节)编译性

  Python使一众解释型语言,这意味这开发过程中没有了编译这个环节。一般来说,由于不是以本地机器码运行,纯粹的解释型语言通常比编译性语言运行的慢。但是类型Java Python实际上是字节编译的,其结果就是可以生成一种近似机器语言的中间形式,这不仅改善了Python的i性能还保留了解释型语言的优点。

核心笔记:

  Python源文件通常用.py扩展名。当源文件被解释器加载或显式地进行字节码编译地时候会被编译成字节码。由于调用解释器地方式不同,源文件会被编译成带有.pyc或.pyo扩展名地文件。

二、Python与其他语言地比较

1、Python和Perl

  向Python一样,Perl赋予了你所有编程语言地功能特性,还有系统调用能力。Perl最大地优势在于它的字符串模式匹配能力,提供了一个十分强大地正则表达式匹配引擎。这使得Perl实际上成为了一种用于过滤、识别和抽取字符串文本地语言,而且它一直是开发web服务器端CGI(通用网关接口)网络程序地最流行地语言。Python地正则表达式请求很大成都上是基于Perl地。然而,Perl 语言地晦涩和对符合语法地过程使用,让解读变得很困难,令初学者不得精要,为它们地学习带来阻碍,而且使得完成同一个任务会有多个方法,进而引起了开发者之间地分歧和内讧。

2、Python和Java

  都由类似地面向对象地特性和语法。Java地语法尽管比C++简单地多但是依旧很繁琐,尤其当你想完成一个小任务地时候,Python地简洁比纯粹使用Java提供了更加快速地开发环境。在Python和Java地关系上是Jython的开发。Jython是一个完全用Java开发的Python解释器,可在Jython的环境中,熟练的处理Java对象,Java可以和Python对象进行交互,访问自己的额Java标准类库,如同Java一直是Python环境的一部分一样。

3、PYthon和Ruby

  Python是多种编程范式的混合,不像Ruby那样完全面向对象,也灭有想Smalltalk那样的块,这正式Ruby最引人注目的特性。Python有一个字节码解释器,Ruby没有。Python更加易读,而Ruby可以看作是面向对象的Perl。相对于Rails,Python有几个自己的Web应用框架,如Django Trubogears这个两个项目。

4、Python和Tcl

  Tcl是最易于使用的脚本语言之一,可以想访问系统调用那样对Tcl语言进行扩展;与Python相比,它有很多局限性(主要是因为它有限的几种数据类型),不过它用于和Python一样的通过拓展超越其原始设计的能力;它通常和他的图形工具包Tk一起工作,一起协同开发图形用户界面应用程序;因为它非常流行,已被移植到Perl(Perl/Tk)和Python(Tkinter)中;同样有一个有争议的观点,那就是与Tcl相比,因为Python有类,模块和包机制,所以写起大程序来跟家顺手。

5、Python和JavaScript

  JavaScript时另外一种非常类似Python的面向对象脚本语言。优秀的JavaScript程序员学期Python来易如反掌。但是JavaScript时基于原型系统的,而Python则遵循纯铜的面向对象系统,这使二者的类和对象有一些差异。

6、Python和其他语言

  Python有一点点函数化编程(FP)结构,这使得它有点类似List或Scheme语言。尽管Python不是传统的函数化编程语言,但它持续从Lisp和haskell语言中借用一些有价值的特性。如列表分析就是一个广受欢迎的来自Haskell世界的特性,而Lisp程序员在遇到lambda,map,filter和reduce时也会感到异常亲切。

三、Stackless

  CPython的一个局限就是每个Python函数调用都会产生一个C函数调用。这意味这同时产生的函数调用是有限制的。因此Python难以实现用户级的线程库和复杂递归调用。一旦超越这个限制,程序就会崩溃。可以使用“stackless"的Python实现来突破这个限制,一个C栈帧可以拥有任意数量的Python栈帧。这样你就能拥有几乎无穷的函数调用,并能支持巨大数量的线程。这个Python实现的名字就叫Stackless.

1、内核级线程和用户级线程

   1.1、内核级线程:

    切换由内核控制,当线程切换时,由用户态转化为内核态,切换完毕后从内核态返回用户态,可以很好的利用多核CPU,windows线程就是这样。一个内核线程由于IO操作而阻塞时,不会影响其他线程的运行。

   1.2、用户级线程:

    切换由用户态程序自己控制内核切换,不需要内核干涉,少了进出内核态的消耗,速度块,操作系统内核不知道多线程的存在,因此一个线程阻塞将使得整个进程阻塞。

   1.3、区别:

    (1)内核级线程时OS内核可感知的,需要OS内核的支持,与进程的创建、撤销和调度大体相同;而用户级线程是OS不可感知的,不需要OS内核的支持,是在语言(如        Java)这一级处理了的。

    (2)用户级线程执行系统调用指令将导致所属进程被中断;而内核级线程执行系统调用指令时,只导致线程被中断。

    (3)用户级线程的程序实体时运行在用户态下的程序,而内核级线程的程序实体则时可以运行在任何状态下的程序。

    (4)在只有用户级线程的系统内,CPU调用以进程为单位,处于运行状态的进程中的多个线程由用户程序控制线程的轮换运行;而在内核级线程的系统内,CPU调用以线程     为单位,由OS的线程调用程序负责线程的调度。

    (5)线程的调度不需要内核直接参与,控制简单;可以在不支持线程的OS中实现

    (6)在多处理机环境下,对用户级线程而言,内核一次只为一个进程分配一个处理器,进程无法享用多处理机带来的好处

    (7)用户级线程创建和销毁线程、线程切换代价等线程管理的代价比内核线程少的多,速度比较快

2、Stackless

    Stackless Python是Python的一个增强版本。Stackless Python修改了Python的代码,提供了对微线程的支持。微线程是轻量级线程,与线程相比,微线程在多个线程之间切换所需时间更多,占用资源更少。

   Stackless Python提供了stackless内置模块。stackless模块中的tasklet对象完成了与创建线程类似的功能。使用tasklet对象可以像创建线程运行函数那样来运行函数。

   >>>import stackless

   >>>def show():

              print 'stackless python'

   >>>st = stackless.tasklet(show)() #调用tasklet添加函数

   >>>st.run() # 调用run方法,执行函数


   

     



  

  

原创粉丝点击