python之一概念了解

  • A+
所属分类:应用

1.1 Python基础介绍

python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。
python是一种面向对象,直译式的计算机程序语言,Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。

1.2Python应用领域

  • 云计算: 应用OpenStack
  • 自动化:Saltstack、Ansible
  • 系统运维: 运维人员必备语言,yum等包管理工具基于python
  • 图形GUI: PyQT, WxPython,TkInte
  • WEB开发: 众多大型网站均为Python开发,Youtube,国内知乎等,典型WEB框架有Django
  • 科学运算:人工智能,典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas
  • 金融行业:在金融工程领域,作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测。

1.3Python语言分析

  • 编程语言主要从以下角度分类:
  • 编译型和解释型
  • 静态语言和动态语言
  • 强类型定义语言和弱类型定义语言

1.3.1编译型与解释型

一般的,编译器(Compiler)负责翻译程序对我们的源代码进行转换,最终生成相对应的可执行代码。这个就称为编译(Compile)。如果我们写的程序代码都包含在一个源文件中,那么通常编译之后就只会直接生成单个可执行文件,我们就可以直接运行了。
但对于一个比较复杂的项目,为了方便管理,我们通常把代码分散在各个源文件和库中,作为不同的模块来组织。这时编译各个文件时就会生成目标文件(Objectfile)而不是前面说的可执行文件。一般一个源文件的编译都会对应一个目标文件。这些目标文件里的内容基本上已经是可执行代码了,但由于只是整个项目的一部分,所以并还不能直接运行。只有当所有的源文件的编译都大功告成,把这些半成品的目标文件封装为一个可执行文件并打通各部分的联系,程序才真正可用。这个工作由另一个程序负责完成,由于此过程好像是把包含可执行代码的目标文件连接装配起来,所以又称为链接(Link),而负责链接的程序就叫链接程序(Linker)。
  相对于编译执行,程序的解释执行就如同,你打算预读一本外文书,而你不知道这门外语,但你可以找一名翻译,给他足够的时间让他从头到尾把整本书翻译好,然后把书的母语版交给你阅读(预处理)。这个过程就转义过程就是解释器或者虚拟机的工作,或者你也立刻让这名翻译辅助你阅读,让他一句一句的给你翻译,如果你想往回看某个章节他也的重新给你翻译(即时翻译)。两者的前提是你已经学会了这种母语,即拥有执行虚拟机环境。

两种方式:c、c++就属于编译型:一次把所有的代码转换成机器语言,然后写成可执行文件。而类似python、go等就相当于我们所说解释型:在程序运行的前一刻, 还只有源程序代码而没有可执行程序;而程每执行到资源程序的某一条执行,则会有一个称之为解释程序的外壳程序,将源代码转换成二进制代码以供执行。

1.3.1静态语言和动态语言

所谓的动态(类型)语言,一般意思就是类型的检查是在运行时做的,比如如下代码是不是合法(如类型判断)要到运行时才判断。同时动态也有程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。而静态语言则在编译后不会变化显然变量类型也不会直接变化。故常见的静态语言一般强类型定义,而类似python的语言则可以较为方便的实现弱类型定义。值得一提的是pypy实现自举解释时,为静态语言,牺牲了变量类型的灵活性而优化了运行的速度。

1.3.3Python优点

Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂.
开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期.

  • 高级语言
    当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节
  • 可移植性
    由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)
  • 可扩展性
    如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。
  • 可嵌入性
    你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。

1.3.4Python缺点

  • 速度慢
    Python 的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些.
  • 代码无法加密
    因为PYTHON是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现。
  • 线程不能利用多CPU
    GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的 工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于 GIL的存在,所以禁止多线程的并行执行。

预编译后的字节码
1.Python是一门解释型语言?
初学Python一直听别人说,Python是一门解释性语言,直到发现了.pyc文件的存在。如果是解释型语言,那么生成的.pyc文件是什么呢?c应该是compiled的缩写才对啊!
为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。
2. 解释型语言和编译型语言
计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。
编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。
解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。

通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。

此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。
用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。

3. Python到底是什么

Python也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。

当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。
Python是一门先编译后解释的语言。

4. 简述Python的运行过程

在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。
我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。

当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

weinxin
我的微信公众号
我的微信公众号扫一扫

发表评论

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen: