Python基础语法
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
or
not
表示与、或、非
与运算:只有两个布尔值都为 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'])