目录
一、基础语法
1.交互式编程
交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码。
①Linux 上只需要在命令行中输入 Python 命令即可启动交互式编程。
提示窗口如下:
$ python
Python 2.7.6 (default, Sep 9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
②Windows 上在安装 Python 时已经安装了交互式编程客户端。
2.脚本式编程
通过脚本参数调用解释器开始执行脚本,直到脚本执行完毕。当脚本执行完成后,解释器不再有效。
所有 Python 文件以 .py 为扩展名,将以下的源代码拷贝至 test.py 文件中:
print ("Hello!")
假设已经设置了 Python 解释器 PATH 变量。使用以下命令运行程序:
$ python test.py
输出结果:
Hello!
重新设置Python解释器PATH变量在/usr/bin目录中:
#!/usr/bin/python
print ("Hello!")
使用以下命令执行脚本:
$ chmod +x test.py # 脚本文件添加可执行权限
$ ./test.py
输出结果:
Hello!
3.标识符
标识符由字母、数字、下划线组成,并且区分大小写。
所有标识符可以包括英文、数字以及下划线(_)开头,但不能以数字开头。
以下划线开头的标识符是有特殊意义的:
以单下划线开头 _p 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入。
以双下划线开头的 __p代表类的私有成员。
以双下划线开头和结尾的 __p__ 代表 Python 里特殊方法专用的标识,如 __init__() 代表类的构造函数。
4.同一行显示多条语句
Python 可以同一行显示多条语句,方法是用分号 ; 分开,如:
>>> print ('hello');print ('haihai');
hello
haihai
5.保留字符
这些保留字不能用作常数或变数,或任何其他标识符名称。并且只包含小写字母。
and | exec | not |
assert | finally | or |
break | for | pass |
class | from | |
continue | global | raise |
def | if | return |
del | import | try |
elif | in | while |
else | is | with |
except | lambda | yield |
6.行和缩进
Python 的代码块不使用大括号 {} 来控制类,函数以及其他逻辑判断。最具特色的就是用缩进来写模块。
缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。
7.错误提醒
1.IndentationError: unindent does not match any outer indentation level错误表明,使用的缩进方式不一致,有的是 tab 键缩进,有的是空格缩进,改为一致即可。
2.IndentationError: unexpected indent 错误表明,文件里格式不对,可能是 tab 和空格没对齐的问题"。
3.SyntaxError :invalid syntax错误表明,忘记在 if , elif , else , for , while , class ,def 声明末尾添加 :。
4.SyntaxError: invalid syntax错误表明,使用 = 而不是 ==。
5.TypeError: ‘list’ object cannot be interpreted as an integer错误表明,在 for 循环语句中忘记调用 len()。
6.TypeError: ‘str’ object does not support item assignment错误表明,尝试修改 string 的值。
7.SyntaxError: EOL while scanning string literal错误表明,在字符串首尾忘记加引号。
8.NameError: name ‘fooba’ is not defined错误表明,变量或者函数名拼写错误。
9.AttributeError: ‘str’ object has no attribute ‘lowerr‘错误表明,方法名拼写错误。
10.IndexError: list index out of range错误表明,引用超过 list 最大索引。
11.KeyError:‘spam’错误表明,使用不存在的字典键值。
12.SyntaxError:invalid syntax错误表明,尝试使用 Python 关键字作为变量名。
13.NameError: name ‘foobar’ is not defined错误表明,在一个定义新变量中使用增值操作符。
14.TypeError: ‘range’ object does not support item assignment错误表明,尝试使用 range() 创建整数列表。
15.SyntaxError: invalid syntax错误表明,不错在 ++ 或者 — 自增自减操作符。
16.TypeError: myMethod() takes no arguments (1 given)错误表明,忘记为方法的第一个参数添加 self 参数。
17.UnboundLocalError: local variable ‘foobar’ referenced before assignment错误表明,在定义局部变量前在函数中使用局部变量(此时有与局部变量同名的全局变量存在)。
18.TypeError: Can’t convert ‘int’ object to str implicitly错误表明,尝试连接非字符串值与字符串。
8.多行语句
Python语句中一般以新行作为语句的结束符。
使用斜杠( \)可以将一行的语句分为多行显示,如:
total = item_one + \
item_two + \
item_three
语句中包含 [], {} 或 () 括号就不需要使用多行连接符,如:
days = ['Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday']
9.引号
可以使用引号( ' )、双引号( " )、三引号( ''' 或 """ ) 来表示字符串,引号的开始与结束必须是相同类型的。
其中三引号可以由多行组成,是编写多行文本的快捷语法,常用于文档字符串,在文件的特定地点,被当做注释。
word = 'you'
sentence = "这是一个句子。"
paragraph = """这是一个段落。
包含了多个语句"""
10.注释
单行注释采用 # 开头,多行注释使用三个单引号 ''' 或三个双引号 """。
11.空行
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
注:空行也是程序代码的一部分。
12.print 输出
print 默认输出是换行的,如果要实现不换行需要在变量末尾加上逗号 ,。
# 不换行输出
print x,
print y,
# 不换行输出
print x,y
执行结果为:
a b a b
13.代码组
缩进相同的一组语句构成一个代码块,称之代码组。
像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。
将首行及后面的代码组称为一个子句(clause),如:
if expression :
suite
elif expression :
suite
else :
suite
二、变量类型
变量是存储在内存中的值,这就意味着在创建变量时会在内存中开辟一个空间。
基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。
因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符。
1.标准数据类型
Python有五个标准的数据类型:
Numbers(数字)
String(字符串)
List(列表)
Tuple(元组)
Dictionary(字典)
2.数字
数字数据类型用于存储数值,是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。
当指定一个值时,Number 对象就会被创建:
var1 = 1
var2 = 10
四种不同的数字类型:
int(有符号整型):通常被称为是整型或整数,是正或负整数,不带小数点。
long(长整型,也可以代表八进制和十六进制):无限大小的整数,整数最后是一个大写或小写的L(最好是大写L)。
float(浮点型):浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 = 250)。
complex(复数):复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。
3.字符串
字符串或串(String)是由数字、字母、下划线组成的一串字符,是编程语言中表示文本的数据类型。可以使用引号 ( ' 或 " ) 来创建字符串。
一般记为 :
s = "a1a2···an" # n>=0
因为Python 不支持单字符类型,所以单字符在 Python 中也是作为一个字符串使用。
在访问子字符串时,可以使用[]来截取字符串输出使用。
1.字符串运算符
下表实例变量 a 值为字符串 "Hello",b 变量值为 "Python":
操作符 | 描述 | 实例 |
+ | 字符串连接 | >>>a + b 'HelloPython' |
* | 重复输出字符串 | >>>a * 2 'HelloHello' |
[] | 通过索引获取字符串中字符 | >>>a[1] 'e' |
[ : ] | 截取字符串中的一部分 | >>>a[1:4] 'ell' |
in | 成员运算符 - 如果字符串中包含给定的字符返回 True | >>>"H" in a True |
not in | 成员运算符 - 如果字符串中不包含给定的字符返回 True | >>>"M" not in a True |
r/R | 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母"r"(可以大小写)以外,与普通字符串有着几乎完全相同的语法。 | >>>print r'\n' \n >>> print R'\n' \n |
% | 格式字符串 |
2.转义字符
在需要在字符中使用特殊字符时,python 用反斜杠 \ 转义字符。如下表:
转义字符 | 描述 |
\(在行尾时) | 续行符 |
\\ | 反斜杠符号 |
\' | 单引号 |
\" | 双引号 |
\a | 响铃 |
\b | 退格(Backspace) |
\e | 转义 |
\000 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
\oyy | 八进制数,y 代表 0~7 的字符,例如:\012 代表换行。 |
\xyy | 十六进制数,以 \x 开头,yy代表的字符,例如:\x0a代表换行 |
\other | 其它的字符以普通格式输出 |
3.字符串格式化符号
符号 | 描述 |
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %F 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
4.格式化操作符辅助指令
符号 | 功能 |
* | 定义宽度或者小数点精度 |
- | 用做左对齐 |
+ | 在正数前面显示加号( + ) |
<sp> | 在正数前面显示空格 |
# | 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') |
0 | 显示的数字前面填充'0'而不是默认的空格 |
% | '%%'输出一个单一的'%' |
(var) | 映射变量(字典参数) |
m.n. | m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
4.列表
列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(即嵌套)。列表的数据项不需要具有相同的类型。
列表用 [ ] 标识,是 python 最通用的复合数据类型。
1.列表的用途
列表中值的切割也可以用到变量 [头下标:尾下标] ,就可以截取相应的列表,从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾。
字串列表有两种取值顺序(索引方式用于所有的数据类型):
从左到右索引默认0开始的,最大范围是字符串长度少1
从右到左索引默认-1开始的,最大范围是字符串开头
使用 [头下标:尾下标] 实现从字符串中获取一段子字符串,其中下标是从 0 开始算起,可以是正数或负数,下标可以为空表示取到头或尾,获取的子字符串包含头下标的字符,但不包含尾下标的字符,如:
>>> s = 'abcdef'
>>> s[1:5]
'bcde'
列表截取可以接收第三个参数,参数作用是截取的步长,以下实例在索引 1 到索引 4 的位置并设置为步长为 2(间隔一个位置)来截取字符串:
>>> s = 'abcdef'
>>> s[1:4:2]
'bd'
2.列表脚本操作符
表达式 | 结果 | 描述 |
len([1, 2, 3, 4]) | 4 | 长度 |
[1, 2, 3] + [4, 5, 6] | [1, 2, 3, 4, 5, 6] | 组合 |
['He'] * 4 | ['He', 'He', 'He', 'He'] | 重复 |
2 in [1, 2, 3, 4] | True | 元素是否存在于列表中 |
for x in [1 , 2, 3, 4]: print x, | 1 2 3 4 | 迭代 |
注:脚本操作符元组,字典也适用。
3.列表函数与方法
函数 | 用处 |
cmp(list1, list2) | 比较两个列表的元素 |
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([index=-1]) | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
list.remove(obj) | 移除列表中某个值的第一个匹配项 |
list.reverse() | 反向列表中元素 |
list.sort(cmp=None, key=None, reverse=False) | 对原列表进行排序 |
5.元组
元组用 () 标识,类似于列表。任意无符号的对象,以逗号隔开,默认为元组。
元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组,当元组被删除后,输出变量会有异常信息。
元组中的元素值是不允许修改的,相当于只读列表,但我们可以对元组进行连接组合。
元组可以使用下标索引来访问元组中的值。
1.创建元组
创建空元组
tup1 = ()
元组中只包含一个元素时,需要在元素后面添加逗号
tup1 = (1,)
2.元组方法
方法 | 用处 |
cmp(tuple1, tuple2) | 比较两个元组元素。 |
len(tuple) | 计算元组元素个数。 |
max(tuple) | 返回元组中元素最大值。 |
min(tuple) | 返回元组中元素最小值。 |
tuple(seq) | 将列表转换为元组。 |
6.字典
字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象集合,字典是无序的对象集合。
两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典用"{ }"标识,由索引(key)和它对应的值value组成。
字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
1.访问字典里的值
tinydict = {'Name': 'Salay', 'Age': 9, 'Class': 'First'}
print "tinydict['Name']: ", tinydict['Name']
print "tinydict['Age']: ", tinydict['Age']
输出:
tinydict['Name']: Salay
tinydict['Age']: 9
2.修改字典
tinydict = {'Name': 'Salay', 'Age': 9, 'Class': 'First'}
tinydict['Age'] = 10 # 更新
tinydict['School'] = "XiWang" # 添加
print "tinydict['Age']: ", tinydict['Age']
print "tinydict['School']: ", tinydict['School']
结果:
tinydict['Age']: 10
tinydict['School']: XiWang
3.删除字典元素
tinydict = {'Name': 'Salay', 'Age': 9, 'Class': 'First'}
del tinydict['Name'] # 删除键是'Name'的条目
tinydict.clear() # 清空字典所有条目
del tinydict # 删除字典
print "tinydict['Age']: ", tinydict['Age']
print "tinydict['School']: ", tinydict['School']
4.字典键的特性
1.不允许同一个键出现两次,创建时如果同一个键被赋值两次,后一个值会被记住。
2.键必须不可变,可以用数字,字符串或元组充当,但是用列表就不行。
5.字典用法
Ddict = {} # 创建一个Ddict字典
Ddict['one'] = "This is one"
Dict[2] = "This is two"
tinydict = {'name': 'wang','code':1234, 'dept': 'sales'}
print Ddict['one'] # 输出键为'one' 的值
print Ddict[2] # 输出键为 2 的值
print tinydict # 输出完整的字典
print tinydict.keys() # 输出所有键
print tinydict.values() # 输出所有值
输出结果为:
This is one
This is two
{'dept': 'sales', 'code': 1234, 'name': 'wang'}
['dept', 'code', 'name']
['sales', 1234, 'wang']
6.字典函数与方法
函数 | 用途 |
cmp(dict1, dict2) | 比较两个字典元素。 |
len(dict) | 计算字典元素个数,即键的总数。 |
str(dict) | 输出字典可打印的字符串表示。 |
type(variable) | 返回输入的变量类型,如果变量是字典就返回字典类型。 |
方法 | 用途 |
dict.clear() | 删除字典内所有元素。 |
dict.copy() | 返回一个字典的浅复制。 |
dict.fromkeys(seq[, val]) | 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值。 |
dict.get(key, default=None) | 返回指定键的值,如果值不在字典中返回default值。 |
dict.has_key(key) | 如果键在字典dict里返回true,否则返回false。Python3 不支持。 |
dict.items() | 以列表返回可遍历的(键, 值) 元组数组。 |
dict.keys() | 以列表返回一个字典所有的键。 |
dict.setdefault(key, default=None) | 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default。 |
dict.update(dict2) | 把字典dict2的键/值对更新到dict里。 |
dict.values() | 以列表返回字典中的所有值。 |
pop(key[,default]) | 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。否则,返回default值。 |
popitem() | 返回并删除字典中的最后一对键和值。 |
7.数据类型转换
数据类型的转换,只需要将数据类型作为函数名即可。
函数 | 描述 |
int(x [,base]) | 将x转换为一个整数 |
long(x [,base] ) | 将x转换为一个长整数 |
float(x) | 将x转换到一个浮点数 |
complex(real [,imag]) | 创建一个复数 |
str(x) | 将对象 x 转换为字符串 |
repr(x) | 将对象 x 转换为表达式字符串 |
eval(str) | 用来计算在字符串中的有效Python表达式,并返回一个对象 |
tuple(s) | 将序列 s 转换为一个元组 |
list(s) | 将序列 s 转换为一个列表 |
set(s) | 转换为可变集合 |
dict(d) | 创建一个字典。d 必须是一个序列 (key,value)元组。 |
frozenset(s) | 转换为不可变集合 |
chr(x) | 将一个整数转换为一个字符 |
unichr(x) | 将一个整数转换为Unicode字符 |
ord(x) | 将一个字符转换为它的整数值 |
hex(x) | 将一个整数转换为一个十六进制字符串 |
oct(x) | 将一个整数转换为一个八进制字符串 |