一、python语句简介(python是面向过程、基于语句的语言)

1、python程序结构:

程序由模块构成

模块由语句构成

语句由表达式构成

表达式建立并处理对象

2、常用python语句集

语句

角色

例子

赋值

创建引用值

a,b,c=’good’,’bad’,’ugly’

调用

执行函数

log.write(“spam,ham\n”)

print

打印对象

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()