一、python语句简介(python是面向过程、基于语句的语言)
1、python程序结构:
程序由模块构成
模块由语句构成
语句由表达式构成
表达式建立并处理对象
2、常用python语句集
语句
角色
例子
赋值
创建引用值
a,b,c=’good’,’bad’,’ugly’
调用
执行函数
log.write(“spam,ham\n”)
打印对象
print ‘the killer’,joke
if/elif/else
选择动作
if ‘python’ in text:
print text
for/else
序列迭代
for x in mylist:
print x
while/else
一般循环
while x>y:
print x
pass
空占位符
while True:
pass
break/continue
循环跳跃
while True:
if not line:break
try/except/finally
捕捉异常
try:
action()
except:
print ‘action error’
raise
触发异常
raise endSearch,location
import,from
模块读取
import sys
from sys import stdin
def,return,yield
创建函数
def f(a,b,c=1,*d):
return a+b+c+d[0]
def gen(n)
for I in n,yield i*2
class
创建对象
class subclass(Superclass):
staticdata=[]
global
命名空间空间
def function():
global x,y
x=’new’
del
删除引用
del data[k]
exec
执行代码字符串
exec “import” +modname
exec code in gdict,ldict
assert
调试检查
assert x>y
with/as
环境管理器
with open(‘data’) as myfile:
process(myfile)
3、try语句:
eg:
while True:
reply=raw_input(‘Enter text:’)
if reply==’stop’:
break
try:
num=int(reply)
except:
print ‘Bad!’*8
else:
print int(reply)**2
print ‘Bye!’
解释:try关键字后面跟上我们尝试运行的代码块,再跟except部分,给异常处理
器代码,再接else部分,如果try部分没有异常,就执行这一部分代码,如
有异常发生就执行except部分代码
二、赋值、表达式、打印语句
1、赋值语句
(1)赋值语句专门特性:
a、赋值对象建立专门引用值,赋值语句总是建立对象的引用值而不是拷
贝;
b、变量名会在首次赋值时被创建;
c、变量名在引用前必须先赋值;
d、隐式赋值语句:import、from、def、class、for、函数参数
(2)赋值语句的形式:
a、基本形式:spam=’spam’
b、元组及列表分解赋值:当“=”左边编写成元组或列表时,python会按照
位置把右边的对象和左边的目标从左到有想配对。
c、序列赋值语句:任何变量名的序列都可以赋值给任何值的序列,python会按照位置一次赋值一个元素
d、多重目标赋值:python赋值相同对象的引用值(最右边的对象)给左边所有的目标
e、增强赋值语句:例如:s+=2相当于s=s+2
(3)序列赋值:
a、高级序列赋值语句模式:可以在“=”两侧混合和匹配匹配序列类型,但左右两边元素的数目必须相等。若要通用,则需要使用分片的方法。
>>>string=’spam’
>>>a,b,c=string[0],string[1],string[2:]
>>>a,b,c=list(string[:2)+[string[2:]]
>>>(a,b),c=string[:2],string[2:]
b、赋值一系列整数给一组变量:
>>>red,green,blue=range(3)
>>>range(3)
[0,1,2]
(4)多目标赋值语句:
a、多目标赋值以及共享引用:
多目标赋值语句中,只有一个对象,由三个变量共享(全都指向内存内统一对象)在此需要注意对象的是否支持在原处的修改
(5)增强赋值语句:
a、增强赋值语句从C借鉴而来:
x+=y
x&=y
x-=y
x|=y
x*=y
x^=y
x/=y
x>>=y
x%=y
x<<=y
x**=y
x//=y(floor除法)
b、增强赋值语句的一些优点:
左侧只需计算一次,执行更快;
优化技术选择,对于支持原处修改的对象而言,增强形式会自动执行原处的修改运算,而不是复制。
c、增强赋值与共享引用:
对列表而言,“+=”隐含了对原处做修改的意思,“+”总是生成新的对象
(6)表达式语句:
a、在python中,可以使用表达式作为语句,但表达式结果不会储存,只有当表达式工作并作为附加的效果时才有意义。通常有两种情况下表达式用作语句:调用函数和方 法、在交互模式下打印值
b、表达式语句通常用于执行可于原处修改列表的列表方法:
>>>L=[1,2]
>>>L.append(3) #这是一条表达式语句,返回值为None
>>>L
[1,2,3]
(7)打印语句:
a、重定向输出流:
print x
等价于:
import sys
sys.stdout.write(str(x)+’\n’)
因为有可能把sys.stdout重新复制给标准输出流意外的东西,这样就可以有一种方法让print语句将文字传送到其他地方:
>>>import sys
>>>sys.stdout=open(‘log.txt’,’w’)
…
print x,y,z
b、print file 扩展:
重定向输出流有一个问题:没有直接的方式可以保存原始的输出流。在打印到文件后可以切换回来。因为sys.stdout只是一个普通文件对象,一个例子如下:
>>>import sys
>>>temp=sys.stdout
>>>sys.stdout=open(‘log.txt’,’a’)
>>>print ‘spam’
>>>print 1,2,3
>>>sys.stdout.close()
>>>sys.stdout=temp
>>>print open(‘log.txt’).read()
spam
1,2,3
这样的操作显得复杂,于是增加了print的扩展功能,当print以>>开始,后面再跟输出的文件对象或其他对象时,该print语句可以将文字传给该对象的write方法。
>>>log=open(‘log.txt’,’a’)
>>>print >> log,’x’.’y’,’z’
这种print扩展形式通常把错误讯息打印到标准错误流sys.stderr,例如:
>>>import sys
>>>sys.stderr.write(‘Bad!’+’\n’)
Bad!
>>>print >>sys.stderr,’Bad!’
Bad!
三、if语句:
1、通用格式:
if <test1>:
<statements1>
elif <test2>:
<statements2>
else:
<statements3>
2、if语句是执行多路分支的最直接的方式
3、一些python语法规则:
(1)语句是逐个运行的;
(2)块和语句的边界会自动被检查;
(3)复合语句=首行+“:”+缩进语句;
(4)空白行、空格以及注释通常会被忽略;
(5)文档字符串(docstring)会被忽略,但会保存并由工具显示;
(6)代码块分隔符:python以行缩进检测块的边界
(7)语句的分隔符:
a、如果使用语法括号对,语句可以横跨数行;
b、如果语句以反斜线结尾,可以横跨数行;
c、三重引号字符串常量可以横跨数行;
d、分号可以分隔在同一行的多条语句
(8)真值测试:
a、任何非零数字或非空对象都为真;
b、数字零、空白对象、None都被认作是假;
c、比较和相等测试会递归地应用在数据结构中;
d、比较和相等测试会返回真或假的操作对象;
e、布尔and和or会返回真或假的操作对象
(9)布尔运算:
and运算:x and y; 若x、y均为真就返回真
or运算:x or y; 若x或y为真就返回真
not运算:not x; 若x为假就返回真
(10)if/else三元表达式:(只有当组成成分及其简单才用,否则写完整的if/else表达式)
A=Y if X else Z
等价于:
if X:
A=Y
else:
A=Z
四、while和for循环语句:
1、while循环:
(1)一般格式:
while <test>:
<statements1>
else:
<statements2>
2、break、continue、pass、循环else
(1)break
跳出最近所在的循环(跳过整个循环语句)
continue
跳到最近所在循环的开头处(来到循环的首行)
pass
什么也不做,只是空占位语句
循环else块
只有当循环正常离开时才会执行(也就是没有碰到break语句)
(2)一般的循环格式:
a、加入break和continue语句后,while循环的一般格式为:
while <test1>:
<statements1>
if <test2>:break
if <test3>:continue
else:
<statements2>
break,continue语句可以出现在while(或for)循环主体的任何地方,但通常会进一步嵌在if语句中,根据相应的条件采取相应的操作
b、pass:
pass语句是空占位语句,当语法需要没有任何实用的语句时,就可以实用这条语句;
c、continue/break语句:
eg:
x=10
while x:
x-=1
if x %2!=0:continue
print x
3、for循环:
for循环是一个通用的序列迭代器:可以遍历任何有序的序列对象内的元素;可用于字符串、列表、元组、其他内置可迭代对象以及通过类所创建的新对象
(1)一般格式:
for <target> in <object>:
<statements1>
else:
<statements2>
for语句也支持一个选用的else块,如果循环离开时没有碰到break语句,就会执行(也就是所有元素被访问完后)
for循环的完整格式:
for <target> in <object>:
<statements1>
if <test1>:continue
if <test2>:break
else:
<statements2>
4、迭代器:
迭代工具包括有:for循环,列表解析,in成员测试,map内置函数等
(1)文件迭代器:
a、readline()方法可以从一个文件中读取一行,每调就会前进到下一行,到达文件末尾时返回空字符串
b、next()方法也有类似功能
c、读取文本文件的最佳方式,利用for循环,例如:
for line in open(‘文件’):
print line.upper
(2)其他内置类型迭代器:
a、列表迭代器:当for循环开始时,会通过它传递给iter()内置函数,以便从迭代对象获取一个迭代器,返回的对象含有需要的next()方法
>>>L=[1,2,3]
>>>I=iter(L)
>>>I.next()
1
b、字典迭代器:会自动返回一个键
>>>D={‘a’:1,‘b’:2,’c’:3}
>>>for key in D:
print key,D[key]
…
a 1
b 2
c 3
c、其他迭代环境:(文件‘script1.py’事先已经写好)
in成员关系测试:
>>>uppers=[line.upper() for line in open(‘script1.py’)]
map()内置函数:
>>>map(str.upper(),open(‘script1.py’))
其他内置函数:
>>>L=[1,2,3,4]
>>>sorted(L)
>>>sum(L)
>>>any([‘spam’,’’,’ni’])
True
>>>all([‘spam’,’’,’ni’])
False
5、编写循环的技巧:
(1)range函数
range函数传入一个参数时,产生从零算起的整数列表;
range函数传入两个参数时,第一个参数视为下边界;
range函数传入三个参数时,第三个参数提供步进值;
range函数常用于for循环中;
range函数加上步进参数常用来实现非完备遍历;
range函数常用于在循环遍历列表时对其进行修改:
eg:
>>>L=[1,2,3,4,5]
>>>for i inrange(len(L)):
L[i]+=1
>>>L
[2,3,4,5,6]
(2)并行遍历:zip()和map()函数:
zip()函数会取得一个或多个序列作为参数,返回值为元组的列表,将这些序列中的并排元素配成对;
map()函数也可以把序列的元素配对,只是参数长度不同时会为较短的序列用None补齐;
a、利用zip()构造字典:
>>>keys=[‘spam’,‘eggs’,’toast’]
>>>vals=[1,2,3]
>>>zip(keys,vals)
>>>D={}
>>>for (k,v) inzip(keys,vals):
D[k]=v
>>>D
{‘spam’:1,’eggs’:2,’toast’:3}
当然我们也可以跳过for循环,利用dic()函数构造字典:
>>>D1=dic(zip(keys,vals))
(3)产生偏移和元素:enumerate()
enumerate()函数返回一个生程器对象:这种对象支持迭代协议,这个对象有一个next()方法,每次遍历列表都会返回一个(index,value)的元组
eg:
>>>S=’spam’
>>>E=enumerate(S)
>>>E.next()
(0,’s’)
6、列表解析:
(1)列表解析基础:从语法上讲,列表解析就是对集合中的每一个元素进行某种运算
eg:
>>>L=[1,2,3,4]
>>>L=[x+10 for x in L]
>>>L
[11,12,13,14]
(2)列表解析都可以用for循环来完成
五、文档:
形式
角色
#注释
文件中的文档
dir函数
对象中可用属性列表
文档字符串:_ _doc_ _
附加在对象上的文件中的文档
PyDoc:help函数
对象的交互帮助
PyDoc:HTML报表
浏览器中的模块文档
标准手册
正式的语言和库说明
网站资源
在线教程和例子
出版书籍
商业参考书籍
1、文档字符串:_ _doc_ _
python支持可自动附加在对象上的文档,而且在运行时可以保存查看。从语法上看,这类注释写成字符串,放在模块文件、函数以及类语句的顶端,就在任何可执行代码 前,python会自动封装这个字符串,成为文档字符串,使其成为相应对象的_ _doc_ _属性。
eg:考虑下面文件docstrings.py
‘’’
Module documentation
Words Go Here
‘’‘
spam=40
def square(x):
‘’’
function documentation
can we have your liver then?
‘’’
return x**2
class employee:
‘class documentation’
pass
print square(4)
print square._ _doc_ _
执行命令:
>>>importdocstrings
16
function documentation
can we have your liverthen?
>>>printdocstrings._ _doc_ _
Module documentation
Words Go Here
>>>print docstrings.employee._ _doc_ _
class documentation
要从模块中类的方法函数的文档字符串,可以路径访问:module.class. method._ _doc_ _
2、PyDoc:HTML报表
PyDoc提供GUI接口将报表通过HTML网页格式来呈现:linux系统下打开GUI的方法如下:
>>>import pydoc
>>>pydoc.gui()