Python编码规范
类名首字母大写,对象名小写。
类的属性与方法名以对象作为前缀。
类的私有变量、私有方法以两个下划线作为前缀。
函数名通常采用小写,并用下划线或者单词首字母大写增强可读性。
Python的注释以 # 开头,后面的文字直到行尾都算注释
Python的编码通过缩进表示每行代码之间的层次关系。如下
x=1
if x == 1:
print"x=",x #代码缩进
else:
print"x=",x #代码缩进
x = x + 1 #代码缩进
print"x=",x
Python中语句可以用;结束语句,也可以省略
#下面两句语句等价
print"hello"
print"hello";
但是在同一行中有多条语句,就必须用分号隔离
#使用分号分隔语句
x = 1 ; y = 1 ; x= 1
对于一些一行代码比较长的语句。
Python支持多行写一条语句,
Python使用\作为多行语句连接符。
以下为两种写法
写法一只用了一对双引号,
写法二用了两对双引号,写法二比写法一的可读性强。
注:\用来链接字符串时,后不能有任何代码,包括注释
print"hello \
world"
print"hello "\
"world"
输出结果都为
hello world
Python有的编辑器是不支持中文字符的,
用到中文需要在最顶部添加
# -*- coding: utf-8 -*-
变量和数据类型
Python会根据变量的值自动判断变量的类型。
有如下类型。
一、整数
Python可以处理任意大小的整数。
二、浮点数
浮点数也就是小数。
三、字符串
字符串是以' '或" "或''' '''(三个单引号)括起来的任意文本
四、布尔值
Python中,可以直接用True、False表示布尔值(注意大小写)
五、空值
空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
运算符与表达式
算术运算符
算数运算符包括四则运算符、求模运算符和求幂运算符。
+:加法运算
-:减法运算
*:乘法运算
/:除法运算
%:求模运算
**:求幂运算
# -*- coding: utf-8 -*-
print"1 + 1 =",1+1 #结果为:1 + 1 = 2
print"2 - 1 =",2-1 #结果为:2 - 1 = 1
print"3 * 2 =",3*1 #结果为:3 * 2 = 3
print"4 / 2 =",4/2 #结果为:4 / 2 = 2
print"1 / 2 =",1/2 #结果为:1 / 2 = 0
print"1 / 2 =",1.0/2.0 #结果为:1 / 2 = 0.5
print"3 % 2 =",3%2 #结果为:3 % 2 = 1
print"2 ** 3 =",2**3 #结果为:2 ** 3 = 8
关系运算符
>:大于
>=:大于等于
<=:小于等于
==:等于
!=:不等于
# -*- coding: utf-8 -*-
print 2 > 1 #结果为:True
print 4 < 2 #结果为:False
print 3 >= 2 #结果为:True
print 2 <= 1 #结果为:False
print 4 == 2 #结果为:False
print 3 != 2 #结果为:True
逻辑运算符
在Python中采用 and ornot表示与、或、非
与运算:只有两个布尔值都为 True 时,计算结果才为 True。
print True and True # ==> True
print True and False # ==> False
print False and True # ==> False
print False and False # ==> False
或运算:只要有一个布尔值为 True,计算结果就是 True。
print True or True # ==> True
print True or False # ==> True
print False or True # ==> True
print False or False # ==> False
非运算:把True变为False,或者把False变为True。
print not True # ==> False
print not False # ==> True
在逻辑运算中,有一条重要法则:短路计算。
1. 在计算 a and b 时,
如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;
如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。
2. 在计算 a or b 时,
如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;
如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。
a = 'python'
print a or 'world' #==>python
b = ''
print b or 'world' #==>world
Python集合与元祖
Python内置的一种数据类型是列表:list。
list是一种有序的集合,可以随时添加和删除其中的元素。
下面演示集合的一系列操作
# -*- coding: utf-8 -*-
L=['A','B','C','D','E',1,2,3,4,5] #定义一个list集合
print L #==>['A', 'B', 'C', 'D', 'E', 1, 2, 3, 4, 5]
#list集合索引是从0开始的。
#读取集合时候不要越界,会报错。
print L[0] #==>A
print L[6] #==>2
#倒序读取
print L[-1] #==>5
print L[-6] #==>E
print L[-10] #==>A
L.append(6) #末尾追加一个元素
print L #==>['A', 'B', 'C', 'D', 'E', 1, 2, 3, 4, 5, 6]
L.insert(1,'in') #在索引为1的位置插入元素'in'
print L #==>['A', 'in', 'B', 'C', 'D', 'E', 1, 2, 3, 4, 5, 6]
L.pop() #删除list最后一个元素
print L #==>['A', 'in', 'B', 'C', 'D', 'E', 1, 2, 3, 4, 5]
#删除最后一个元素并打印出这个值
print L.pop() #==>5
print L #==>['A', 'in', 'B', 'C', 'D', 'E', 1, 2, 3, 4]
L.pop(1) #删除索引值为1的元素
print L #==>['A', 'B', 'C', 'D', 'E', 1, 2, 3, 4]
#替换数组中的值
L[1]='TB' #替换索引值为1的值为TB
L[-2]=33 #替换倒数第二个值为33
print L #==>['A', 'TB', 'C', 'D', 'E', 1, 2, 33, 4]
总结上面的测试代码,列表有几个常用的函数。
append(object):在列表的尾部添加一个object
indert(index,object):在指定的索引处插入一个object
pop([index]):删除索引index指定的值,如果index不指定则删除最后一个元素
还有不常用的一些。
remove(value):删除列表中首次出现的value值
extend(iterable):将iterable指定的元素复制到列表的尾部
index(value,[start,[stop]]):返回value出现在列表中的索引值,start、stop可省略
sort(cmp=None,key=None,reverse=False):列表的排序
reverse():列表的反排序
tuple是另一种有序的列表,中文翻译为“ 元组 ”。
tuple 和 list 非常类似,但是,tuple一旦创建完毕,就不能修改了。
获取 tuple 元素的方式和 list 是一模一样的,
可以正常使用 t[0],t[-1]等索引方式访问元素,
但是不能赋值也不能删除里面元素。
单元素元组需要在元素后面加上,
因为()既可以表示tuple,又可以作为括号表示运算时的优先级,
结果 (1) 被Python解释器计算出结果 1,导致我们得到的不是tuple,而是整数 1。
正是因为用()定义单元素的tuple有歧义,
所以 Python 规定,单元素 tuple 要多加一个逗号“,”
T=(1)
print T #==>1
T = (1,)
print T #==>(1,)
元组的访问还有一种特殊方法,
分片(slice)是元组的一个子集,
在与之类似的数组也能使用
分片是从从第一个索引(包含第一个索引所指向的元素)
到第二个索引(不包含第二个索引所指向的元素)所指定的所有元素。
分片的表达式如下:
tuple[m:n]
# -*- coding: utf-8 -*-
T = (0,1,2,3,4,5)
#包含左边索引对应值,不包含右边索引对应值
print T[1:3] #==>(1, 2)
print T[1:-2] #==>(1, 2, 3)
print T[2:] #==>(2, 3, 4, 5)
print T[:3] #==>(0, 1, 2)
print T[:] #==>(0, 1, 2, 3, 4, 5)
print T[:10] #==>(0, 1, 2, 3, 4, 5)
print T[10:] #==>()
数组访问之打包解包
# -*- coding: utf-8 -*-
T = (00,10,20,30,40,50) #打包
a,b,c,d,e,f=T #解包,需要一一对应
print b #==>10
T = [00,10,20,30,40,50] #打包
a,b,c,d,e,f=T #解包,需要一一对应
print b #==>10
Python控制语句
Python中条判断语句:
if语句、if...else...语句、if...elif...else...语句
使用控制语句需要注意Python缩进规则,具有相同缩进的代码被视为代码块,
缩进请严格按照Python的习惯写法:
4个空格,不要使用Tab,因为有的编译器Tab不是四个空格,很容易造成因为缩进引起的语法错误。
通过缩进代码可以互相嵌套。
注意: 语句后接表达式,然后用:表示代码块开始。
# -*- coding: utf-8 -*-
age = 50
if age >= 18:
if age>=60:
print "老年人"
else:
print '成年人'
elif age >= 12:
print '青年'
elif age >= 3:
print '儿童'
else:
print '宝宝'
Python中循环语句:
for循环、while循环。
for 循环可以依次把list或tuple的每个元素迭代出来
while 循环不会迭代 list 或 tuple 的元素,而是根据表达式判断循环是否结束。
# -*- coding: utf-8 -*-
L = [1, 2, 3, 4, 5]
sum = 0
for i in L: #依次取出L中元素放入i中
sum+=i
print sum #==>15
i = 1
sum = 0
while i<=5:
sum=sum+i
i=i+1
print sum #==>15
break 与continue语句
break:退出循环语句
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
L = [1, 2, 3, 4, 5]
sum = 0
for i in L:
sum+=i
if i==3: #当取出元素等于3
break #退出循环体
print sum #==>6
continue:跳过本次循环
# -*- coding: utf-8 -*-
L = [1, 2, 3, 4, 5]
sum = 0
for i in L:
if i%2==0: #当取出元素是偶数
continue #跳过执行下面代码,
sum+=i
print sum #==>9
了解这两个控制语句后,来看看
for...else...、while...else...语句。
只有当循环执行结束才会运行循环后else代码块语句。
循环过程中途退出循环则不会运行循环后else代码块语句。
continue不会影响执行else语句
# -*- coding: utf-8 -*-
L = [1, 2, 3, 4, 5]
sum = 0
for i in L:
if i%2==0: #当取出元素是偶数
continue #跳过执行下面循环体内代码,
sum+=i
else: #循环语句执行完成,进入else
sum=0
print sum #==>0
break直接退出循环,包括else
# -*- coding: utf-8 -*-
L = [1, 2, 3, 4, 5]
sum = 0
for i in L:
sum+=i
if i==3: #当取出元素等于3
break #退出整个循环结构,包括后面的else
else:
sum=0
print sum #==>6
循环也是可以多重嵌套的,
for x in ['A', 'B', 'C']:
for y in ['1', '2', '3']:
print x + y
结果为:
A1
A2
A3
B1
B2
B3
C1
C2
C3
Python中Dict和Set类型
Dict与list 、 tuple 可以用来表示顺序集合,
但是Dict可以自定义索引,
所以Dict也叫字典,他是由一系列的 “键:值”(key:value)对组成.
对之间用逗号隔开。然后通过对应的索引值可以取得元素
注意:索引区分大小写
d = {
'A': 1,
'B': 2,
'C': 3
}
print d['A'] #==>1
由于“键:值”算一个,所以字典d的大小为3
在字典中通过 key 访问 字典 的值,只要 索引 存在,字典就返回对应的值。
如果如果不存在,会直接报错。
所以有以下解决方法。
# -*- coding: utf-8 -*-
d = {
'A': '我是A',
'B': '我是B',
'C': '我是C'
}
#方法一先判断
if 'A' in d: #判断A是否在字典中
print d['A']
#方法二直接读取,如果不存在返回空
print d.get("A") #==>我是A
print d.get("D") #==>None
dict的第一个特点是查找速度快,
无论dict有10个元素还是10万个元素,查找速度都一样。
而list的查找速度随着元素增加而逐渐下降。
不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,
还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。
由于dict是按 key 查找,所以,在一个dict中,key不能重复。
dict的第二个特点就是存储的key-value序对是没有顺序的
这和list不一样。
dict打印的顺序不一定是我们创建时的顺序,
而且,不同的机器打印的顺序都可能不同,这说明dict内部是无序的,不能用dict存储有序的集合。
dict的第三个特点是作为 key 的元素必须不可变
Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。
但是list是可变的,就不能作为 key。
字典的值是可变的,可以通过索引赋值。
# -*- coding: utf-8 -*-
d = {
'A': 'woshiA',
'B': 'woshiB',
'C': 'woshiC'
}
d['A']='tihuan'
print d #==>{'A': 'tihuan', 'C': 'woshiC', 'B': 'woshiB'}
字典遍历
d = {
'A': 111,
'B': 222,
'C': 333
}
for key in d:
print key,d[key]
结果为:
A 111
C 333
B 222
dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的。
有的时候,我们只想要 dict 的 key,不关心 key 对应的 value,
目的就是保证这个集合的元素不会重复,这时,set就派上用场了。
set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。
s = set(['A', 'B', 'C'])
print s #==>set(['A', 'C', 'B'])
set不能包含重复的元素,所以,当我们传入包含重复元素的 list ,set会自动去掉重复的元素
s = set(['A', 'B', 'C','C'])
print s #==>set(['A', 'C', 'B'])
由于set存储的是无序集合,所以我们没法通过索引来访问。
我们可以用 in 操作符判断:
s = set(['A', 'B', 'C'])
print 'A' in s #==>True
print 'D' in s #==>False
print 'b' in s #==>False
字典还能添加和删除元素
d = {
'A': 111,
'B': 222,
'C': 333
}
d.setdefault('D',444)
print d #==>{'A': 111, 'C': 333, 'B': 222, 'D': 444}
print d.pop('A') #==>111
print d #==>{'C': 333, 'B': 222, 'D': 444}
由于 set 也是一个集合,所以,遍历 set 和遍历 list 类似,都可以通过 for 循环实现。
s = set(['A', 'B', 'C'])
for key in s:
print key
结果为:
A
C
B
由于set存储的是一组不重复的无序元素,因此,更新set主要做两件事:
一是把新的元素添加到set中,二是把已有元素从set中删除。
注意:如果删除的元素不存在set中,remove()会报错,
所以在删除不确定的元素之前需要先做判断
s = set(['A', 'B', 'C'])
s.add('D')
s.remove('B')
if 'B' in s: #判断'B'对否在s内
s.remove('B')
print s #==>set(['A', 'C', 'D'])