Python 介绍
Python 是一种面向对象的解释型计算机程序设计语言(也可以面向过程),是纯粹的自由软件, 源代码和解释器 CPython 遵循 GPL 协议。
Python 具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。
- 面向过程:以指令为中心,由指令处理数据,如何组织代码解决问题
- 面向对象:以数据为中心,所有的处理代码都围绕数据展开,如何设计数据结构组织数据,并提供对此类数据所允许处理操作
- 编译型:运行前先由编译器将高级语言代码编译为对应机器的cpu汇编指令集,再由汇编器汇编为目标机器码,生成可执行文件,然最后运行生成的可执行文件。不能跨平台,最典型的代表语言为C/C++,一般生成的可执行文件及.exe文件。
- 解释型:在运行时由翻译器将高级语言代码翻译成易于执行的中间代码,并由解释器(例如浏览器、虚拟机)逐一将该中间代码解释成机器码并执行(可看做是将编译、运行合二为一了)。运行速度相对于编译型语言要慢,最典型的代表语言为JavaScript、Python、Ruby和Perl等
1、Python 的版本
目前使用的 Python 版本有 2.x 和 3.x,2.7 以后不再继续更新,所以 3.x 是以后的主流
Python 2.x 和 3.x 的区别
http://www.cnblogs.com/codingmylife/archive/2010/06/06/1752807.html
为了照顾现有程式,Python 2.6 作为一个过渡版本,基本使用了 Python 2.x 的语法和库,同时考虑了向 Python 3.0 的迁移,允许使用部分 Python 3.0 的语法与函数。
- print 函数。Py3.x 中 print 语句没有了,取而代之的是 print() 函数。 Python 2.6 与Python 2.7 部分地支持这种形式的print语法。
- 字符编码和字符串。Py3.x 源码文件默认使用 utf-8 编码,字符串只有 str 一种类型
- 除法运算。Py3.x 中除法对于整数之间的相除不会只取整数,有小数位也会是浮点数,取整除需要 // 运算符
- 比较运算符。去除了 <>,全部改用!=
- 数据类型。Py3.X 去除了 long 类型,现在只有一种整型—— int,但它的行为就像 2.X 版本的 long
提示
系统自带的 python 可能版本很低,但并不是可以直接替换新版本,因为可能有许多程序
解决方法
编译安装新版 python 到指定路径
[root@Centos ~]# python
Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
相关依赖(否则交互式使用时无法回退)
[root@Centos ~]# yum -y install readline-devel
[root@Centos ~]# tar xf Python-3.6.0.tar
[root@Centos ~]# cd Python-3.6.0/
./configure --prefix=/usr/local/Python-3.6.0
make && make install
2、Python 基础语法
2.1 字符编码
- Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码。
- Python2.X 源码文件 默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。
解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*-
或者 #coding=utf-8
就行了
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。
GB2312 为了处理汉字,1980 年程序员设计了 用于简体中文的 GB2312 和繁体中文的 big5。收录了 7445 个字符(6763 个数字和 682 个其他符号)
**GBK1.0 **由于 GB2312 收录的汉字太少,1955 年汉字扩展规范 GBk1.0 收录了 21886 个字符(21003个汉字,和图形符号)
**GB18030 **2000 年 GB18030 取代 GBK1.0 成为正式国家标准,收录了 27484 个汉字,同时收录了主要少数民族文字。现在 PC 必须支持 GB18030
Unicode 为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定所有的字符和符号最少由 16 位来表示(2 个字节)以满足跨语言、跨平台进行文本转换、处理的要求。
UTF-8 是一种针对 Unicode 的压缩和优化,不再最少使用 2 个字节,ASCII 码中的内容用 1 个字节保存呢、欧洲字符用 2 个字节保存,东亚的字符用 3 个字节保存
2.2 变量规范
- 第一个字符必须是字母表中字母或下划线'_'。
- 标识符的其他的部分有字母、数字和下划线组成。
- 标识符对大小写敏感。
下面变量关键字已被系统定义,不能声明:
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif','else','except', 'finally', 'for', 'from', 'global', 'if','import', 'in','is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
2.3 注释
单行注释用 # 即可,多行数据可以在开头结尾使用三个单引号 '''
2.4 行与缩进
python 最具特色的就是使用缩进来表示代码块,不需要使用大括号({})。缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。
2.5 多行语句
Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠()来实现多行语句,例如:
>>> name = ("zzz",
... "bbb")
>>> name
('zzz', 'bbb')
>>> name[0]
'zzz'
3、Python 解释器
当我们编写 Python 代码时,我们得到的是一个包含 Python 代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。常见的解释器有:CPython、Ipython、pypy、JPython、IronPython。
-
CPython 一个官方版本的解释器,C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。CPython用“>>>”作为提示符
-
IPython 基于 CPython 之上的一个交互式解释器,IPython 只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。IPython 用In [序号]:作为提示符。
-
PyPy 是另一个 Python 解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。
-
Jython 是运行在 Java 平台上的 Python 解释器,可以直接把 Python 代码编译成 Java 字节码执行。
-
IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
4、Python3 数据类型
Python 的基本数据类型有 5 种: 数字(number),字符型(string),列表(list),元祖(tuple),集合(sets),字典(dictionary)
4.1 数字(number)
Python3 支持 int(整型)、float(浮点型)、bool(布尔值)、complex(复数)。
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如, 1.23x109 和 12.3x108 是相等的。
布尔值和布尔代数的表示完全一致,一个布尔值只有 True 、 False 两种值
数字转换
-
int(x) 将x转换为一个整数。
-
float(x) 将x转换到一个浮点数。
-
complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。
-
complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式
4.2 字符串
字符串是以''或""括起来的任意文本,比如 'abc' , "xyz" ,同时使用反斜杠()转义特殊字符。
索引值以 0 为开始值,-1 为从末尾的开始位置。加号 (+) 是字符串的连接符, 星号 (*) 表示复制当前字符串,紧跟的数字为复制的次数。实例如下:
#!/usr/bin/python3
str = 'Runoob'
print (str) # 输出字符串
print (str[0:-1]) # 输出第一个个到倒数第二个的所有字符
print (str[0]) # 输出字符串第一个字符
print (str[2:5]) # 输出从第三个开始到第五个的字符
print (str[2:]) # 输出从第三个开始的后的所有字符
print (str * 2) # 输出字符串两次
print (str + "TEST") # 连接字符串
执行以上程序会输出如下结果:
Runoob
Runoo
R
noo
noob
RunoobRunoob
RunoobTEST
4.3 列表
List(列表) 是 Python 中使用最频繁的数据类型,列表可以完成大多数集合类的数据结构实现。
-
列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
-
列表是写在方括号 [] 之间、用逗号分隔开的元素列表。
-
和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。
列表的操作参数
列表的内置函数 | 解释 |
---|---|
len(list) | 列表元素个数 |
max(list) | 返回列表元素最大值 |
min(list) | 返回列表元素最小值 |
list(seq) | 将元组转换为列表 |
list.append(obj) | 在列表末尾添加新的对象 |
list.count(obj) | 统计某个元素在列表中出现的次数 |
list.extend(seq) | 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
list.index(obj) | 从列表中找出某个值第一个匹配项的索引位置 |
list.insert(index, obj) | 将对象插入列表 |
list.pop(obj=list[-1]) | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
list.remove(obj) | 移除列表中某个值的第一个匹配项 |
list.reverse() | 反向列表中元素 |
list.sort([func]) | 对原列表进行排序 |
list.clear() | 清空列表 |
list.copy() | 复制列表 |
4.3 元祖
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。
4.5 集合
集合(set)是一个无序不重复元素的序列。
基本功能是进行成员关系测试和删除重复元素。
可以使用大括号 {} 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 {},因为 {} 是用来创建一个空字典
4.6 字典
字典(dictionary)是Python中另一个非常有用的内置数据类型。
列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,列表通过偏移存取。
字典是一种映射类型,字典用"{}"标识,它是一个无序的键(key) : 值(value)对集合。
键(key)必须使用不可变类型。且在同一个字典中,键(key)必须是唯一的。
#!/usr/bin/python3
dict = {}
dict['one'] = "1 - 教程"
dict[2] = "2 - 工具"
tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'}
print (dict['one']) # 输出键为 'one' 的值
print (dict[2]) # 输出键为 2 的值
print (tinydict) # 输出完整的字典
print (tinydict.keys()) # 输出所有键
print (tinydict.values()) # 输出所有值
以上实例输出结果:
1 - 教程
2 - 工具
{'name': 'runoob', 'site': 'www.runoob.com', 'code': 1}
dict_keys(['name', 'site', 'code'])
dict_values(['runoob', 'www.runoob.com', 1])
字典的内置函数 | 解释 |
---|---|
len(dict) | 计算字典元素个数,即键的总数 |
str(dict) | 输出字典以可打印的字符串表示 |
type(variable) | 返回输入的变量类型,如果变量是字典就返回字典类型 |
radiansdict.clear() | 删除字典内所有元素 |
radiansdict.copy() | 返回一个字典的浅复制 |
radiansdict.fromkeys() | 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
radiansdict.get(key, default=None) | 返回指定键的值,如果值不在字典中返回default值 |
key in dict | 如果键在字典dict里返回true,否则返回false |
radiansdict.items() | 以列表返回可遍历的(键, 值) 元组数组 |
radiansdict.keys() | 以列表返回一个字典所有的键 |
radiansdict.setdefault(key, default=None) | 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
radiansdict.update(dict2) | 把字典dict2的键/值对更新到dict里 |
radiansdict.values() | 以列表返回字典中的所有值 |
5、运算符
Python 的运算符有:
- 算术运算符
- 比较(关系)运算符
- 赋值运算符
- 逻辑运算符
- 位运算符
- 成员运算符
- 身份运算符
- 运算符优先级
5.1 算术运算符
以下假设变量a为10,变量b为21:
| 运算符 | 描述 | 实例 |
|---||
| + | 加 - 两个对象相加 | a + b 输出结果 31 |
| - | 减 - 得到负数或是一个数减去另一个数 | a - b 输出结果 -11 |
| * | 乘 - 两个数相乘或是返回一个被重复若干次的字符串 | a * b 输出结果 210 |
| / | 除 - x 除以 y | b / a 输出结果 2.1 |
| % | 取模 - 返回除法的余数 | b % a 输出结果 1 |
| ** | 幂 - 返回x的y次幂 | a**b 为10的21次方 |
| // | 取整除 - 返回商的整数部分 | 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0 |
5.2 比较运算符
以下假设变量a为10,变量b为20:
| 运算符 | 描述 | 实例 |
|---||
| == | 等于 - 比较对象是否相等 | (a == b) 返回 False。 |
| != | 不等于 - 比较两个对象是否不相等 | (a != b) 返回 true. |
| > | 大于 - 返回x是否大于y | (a > b) 返回 False。 |
| < | 小于 - 返回x是否小于y | (a < b) 返回 true。 |
| >= | 大于等于 - 返回x是否大于等于y。 | (a >= b) 返回 False。 |
| <= | 小于等于 - 返回x是否小于等于y。 | (a <= b) 返回 true。 |
5.3 赋值运算符
以下假设变量a为10,变量b为20:
| 运算符 | 描述 | 实例 |
|---||
| = | 简单的赋值运算符 | c = a + b 将 a + b 的运算结果赋值为 c |
| += | 加法赋值运算符 | c += a 等效于 c = c + a |
| -= | 减法赋值运算符 | c -= a 等效于 c = c - a |
| *= | 乘法赋值运算符 | c *= a 等效于 c = c * a |
| /= | 除法赋值运算符 | c /= a 等效于 c = c / a |
| %= | 取模赋值运算符 | c %= a 等效于 c = c % a |
| **= | 幂赋值运算符 | c **= a 等效于 c = c ** a |
| //= | 取整除赋值运算符 | c //= a 等效于 c = c // a |
5.4 位运算符
按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:
下表中变量 a 为 60,b 为 13二进制格式如下:
a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
| 运算符 | 描述 | 实例 |
|---||
| & | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 |(a & b) 输出结果 12 ,二进制解释: 0000 1100 |
| 竖线 | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 | (a 或 b) 输出结果 61 ,二进制解释: 0011 1101 |
| ^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
| ~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。 |
| << | 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 | a << 2 输出结果 240 ,二进制解释: 1111 0000 |
| >> | 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
5.5 语言支持逻辑运算符
以下假设变量 a 为 10, b为 20:
| 运算符 | 逻辑表达式 | 描述 | 实例 |
|---||||
| and | x and y | 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 | (a and b) 返回 20。 |
| or | x or y | 布尔"或" - 如果 x 是 True,它返回 True,否则它返回 y 的计算值。 | (a or b) 返回 10。 |
| not | not x | 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 | not(a and b) 返回 False |
5.6 成员运算符
除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。
| 运算符 | 描述 | 实例 |
|---||
| in | 如果在指定的序列中找到值返回 True,否则返回 False。 | x 在 y 序列中 , 如果 x 在 y 序列中返回 True。 |
| not in | 如果在指定的序列中没有找到值返回 True,否则返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |
5.7 身份运算符
身份运算符用于比较两个对象的存储单元
| 运算符 | 描述 | 实例 |
|---||
| is | is是判断两个标识符是不是引用自一个对象 | x is y, 如果 id(x) 等于 id(y) , is 返回结果 1 |
| is not | is not是判断两个标识符是不是引用自不同对象 | x is not y, 如果 id(x) 不等于 id(y). is not 返回结果 1 |
5.8 运算符优先级
| 运算符 | 描述 |
|---||
| ** | 指数 (最高优先级) |
| ~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
| * / % // | 乘,除,取模和取整除 |
| + - | 加法减法 |
| >> << | 右移,左移运算符 |
| & | 位 'AND' |
| ^ | | 位运算符 |
| <= < > >= | 比较运算符 |
| <> == != | 等于运算符 |
| = %= /= //= -= += *= **= | 赋值运算符 |
| is is not | 身份运算符 |
| in not in | 成员运算符 |
| not or and | 逻辑运算符 |