1、解释器
当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。
由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。
1)CPython
当我们从Python官方网站下载并安装好Python 3.x后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。
CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。
2)IPython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。
CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。
3)PyPy
PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。
绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
4)Jython
Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
5)IronPython
IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
6)小结
Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。
2、关键字
关键字即保留字,我们不能把它们用作任何标识符名称。Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:
条件 |
循环 |
内置函数 |
类、模块和函数 |
错误处理 |
or |
in |
del |
def |
try |
is |
as |
pass |
class |
raise |
if |
for |
print |
from |
with |
else |
while |
|
global |
except |
elif |
break |
|
return |
finally |
not |
continue |
|
import |
assert |
and |
|
|
lambda |
|
True |
|
|
nonlocal |
|
False |
|
|
yield |
|
None |
|
|
|
|
3、运算符
1)算术运算符
运算符 |
描述 |
+ |
加:两个对象相加 |
- |
减:得到负数或一个数减去另一个数 |
* |
乘:两个数相乘或返回一个被重复若干次的字符串 |
/ |
除:x除以y |
** |
幂:返回x的y次幂 |
% |
取模:返回除法的余数 |
// |
取整除:返回商的整数部分 |
2)比较运算符
运算符 |
描述 |
== |
等于:比较对象是否相等 |
!= |
不等于:比较两个对象是否不相等 |
> |
大于:返回x是否大于y(返回True或False) |
> |
小于:返回x是否小于y(返回True或False) |
>= |
大于等于:返回x是否大于等于y |
<= |
小于等于:返回x是否小于等于y |
3)赋值运算符
运算符 |
描述 |
= |
简单的赋值运算符 |
+= |
加法赋值运算符 |
-= |
减法赋值运算符 |
*= |
乘法赋值运算符 |
/= |
除法赋值运算符 |
%= |
取模赋值运算符 |
**= |
幂赋值运算符 |
//= |
取整除赋值运算符 |
4)逻辑运算符
运算符 |
描述 |
and |
布尔“与”:如果x为Flase,x and y就返回Flase;否则返回y的计算值; |
or |
布尔“或”:如果x是非0,就返回x的值;否则返回y的计算值; |
not |
布尔“非”:如果x为True,就返回Flase;如果x为Flase,就返回Ture |
5)位运算符
运算符 |
描述 |
& |
按位与运算符:若参与运算的两个值的两个相应位都为1,则该位的结果为1,否则为0; |
| |
按位或运算符:只要对应的两个二进制位有一个为1,结果位就为1; |
^ |
按位异或运算符:当两个对应的二进制位相异时,结果为1 |
~ |
按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1; |
<< |
左移运算符:运算数的各个二进制位全部左移若干位,由<<右边的数指定移动的位数,高位丢弃,低位补0; |
>> |
右移动运算符:把>>左边运算数的二进制位全部右移若干位,>>右边的运算数指定移动的位数。低位丢弃,高位补0 |
6)成员运算符
运算符 |
描述 |
in |
如果在指定的序列中找到值,就返回Ture;否则返回Flase |
not in |
如果在指定的序列中没有找到值,就返回True;否则返回Flase |
7)身份运算符
运算符 |
描述 |
is |
is判断两个标识符是否引用自一个对象 |
is not |
is not用于判断两个标识符是否引用自不同对象 |
8)运算符优先级
运算符 |
描述 |
** |
指数(最高优先级) |
~ + - |
按位翻转,一元加号和减号(最后两个的方法名为 +@ 和 -@) |
|
乘、除、取模和取整除 |
|
加法、减法 |
>> << |
右移、左移运算符 |
& |
位 And |
^| |
位运算符 |
<= <> >= |
比较运算符 |
4、ASCII码