python之路——开始

此博客,完全来自于一位大牛的博客,仅仅是重新改了一遍(金角大王等待唐僧的日子https://www.cnblogs.com/alex3714/)
原文是博客

编译和解释的区别是什么?

由于计算机只可识别机器语言(是二进制的形式)。
python: 解释型
c,c++ :编译型
java, c#, python :混合型

编译器:源程序一次性都编译成机器语言,并保存成二进制文件。
运行时计算机执行二进制文件即可,以后与源码无关。

优点:

  1. 编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高
  2. 可以脱离语言环境独立运行。

缺点:

  1. 编译之后如果需要修改就需要整个模块重新编译
  2. 编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。

解释器
只在执行程序时,才一条一条的解释成机器语言给计算机来执行。

优点:

  1. 良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。
  2. 灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。

缺点:
每次运行的时候都要重新解释一遍性能上不如编译型语言

.py执行过程

  1. 解释型语言和编译型语言

计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释

编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。

解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。

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

python是什么语言?

随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。

用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言
其实Python和Java/C#一样,也是一门基于虚拟机的语言,Python是一门先编译后解释的语言。

简述Python的运行过程

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

.pyc和.PyCodeObject是个什么鬼?

在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。

我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。

当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。

当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。

所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

Python解释器

当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。

由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。

CPython

当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。

CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。

IPython

IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。

CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。

Jython

Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

python安装

windows

1、下载安装包
    https://www.python.org/downloads/
2、安装
    默认安装路径:C:\python27
3、配置环境变量
    【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】
    如:原来的值;C:\python27,切记前面有分号

linux、Mac

无需安装,原装Python环境
  
ps:如果自带2.6,请更新至2.7

执行python代码

方式一
在名为hello.py的文件里,输入print("Hello World!")
然后执行命令: python hello.py

方式二
在名为hello.py的文件里,输入

#!/usr/bin/env python
print("Hello World!")

然后执行命令: ./hello.py,即可。而不再是python ./hello.py.

ps:执行前需给予 hello.py 执行权限,chmod 755 hello.py

在交互器中执行
除了把程序写在文件里,还可以直接调用python自带的交互器运行代码,

localhost:~ jieli$ python
>>> print("Hello World!")
Hello World!

字符编码

python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill )

ASCII

ASCII是一套电脑编码系统,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。

关于中文

发展:ASCII------->GB2312------>gbk1.0------>gb18030
为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5

GB2312(1980年) 一共收录了7445个字符,包括6763个汉字和682个其它符号。GB2312 支持的汉字太少。

1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。

2000年的 GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。
现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。

区分中文编码的方法是高字节的最高位不为0。
按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。

Unicode

显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码
规定所有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多

UTF-8

UTF-8,是对Unicode编码的压缩和优化他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存…

总结

所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:

报错:ascii码无法表示中文

#!/usr/bin/env python  
print "你好,世界"

改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
print "你好,世界"

猜你喜欢

转载自blog.csdn.net/MosBest/article/details/85249476
今日推荐