您的位置:首页 > 编程语言 > Python开发

自动化测试脚本语言-Python 读书笔记

2010-05-11 10:00 489 查看

python读书笔记


1格式说明

1,同一层次的语句必须有相同的缩进。每一组这样的语句称为一个
2,行结束符号
每个块语句(函数def,if,else,for,while等)开始的行结束
其他的行没有结束符号,也可以有分号;
3,注释符号为#
4,区分大小写??
5,赋值语句:使用等号=
条件判断语句:使用双等号==
6,变量不需要申明,直接使用

2函数

函数通过
def
关键字定义。def关键字后跟一个函数的标识符名称,然后跟一对圆括号。圆括号之中可以包括一些变量名,该行以冒号结尾。接下来是一块语句,它们是函数体。下面这个例子将说明这事实上是十分简单的:

def
printMax
(a,b):

if
a>b:

print
a,'ismaximum'

else
:

print
b,'ismaximum'


printMax(3,4)#directlygiveliteralvalues


2.1默认参数值

def
say
(message,times=1):

print
message*times


say('Hello')

say('World',5)


关键参数
def
func
(a,b=5,c=10):

print
'ais'
,a,'andbis',b,'andcis',c


func(3,7)

func(25,c=24)

func(c=50,a=100)



pass
语句在Python中表示一个空的语句块。
def
someFunction
():

pass


2.2在函数中接收元组和列表

当要使函数接收元组或字典形式的参数的时候,有一种特殊的方法,它分别使用
*
**
前缀。这种方法在函数需要获取可变数量的参数的时候特别有用。

>>>defpowersum(power,*args):

...'''Returnthesumofeachargumentraisedtospecifiedpower.'''

...total=0

...foriinargs:

...total+=pow(i,power)

...returntotal

...

>>>powersum(2,3,4)

25=3
2
+4
2


>>>powersum(2,10)

100


由于在
args
变量前有
*
前缀,所有多余的函数参数都会作为一个元组存储在
args
中。如果使用的是
**
前缀,多余的参数则会被认为是一个字典的键/值对


3模块

为了在其他程序中重用模块,模块的文件名必须
.py
为扩展名。

3.1import

import
sys


Python下标从0开始计数,而非从1开始。


字节编译的.pyc文件
这些字节编译的文件也是与平台无关的。

3.2from..import语句

如果你想要直接输入
argv
变量到你的程序中(避免在每次使用它时打
sys.
),那么你可以使用
fromsysimportargv
语句。如果你想要输入所有
sys
模块使用的名字,那么你可以使用
fromsysimport*
语句。这对于所有模块都适用。一般说来,应该避免使用
from..import
而使用
import
语句,因为这样可以使你的程序更加易读,也可以避免名称的冲突

3.3_name_

当一个模块被第一次输入的时候,这个模块的主块将被运行。假如我们只想在程序本身被使用的时候运行主块,而在它被别的模块输入的时候不运行主块,我们该怎么做呢?这可以通过模块的__name__属性完成。
if
__name__=='__main__':

print
'Thisprogramisbeingrunbyitself'

else
:

print
'Iambeingimportedfromanothermodule'

3.4使用global语句

如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是全局的。我们使用
global
语句完成这一功能。没有
global
语句,是不可能为定义在函数外的变量赋值的。

你可以使用同一个
global
语句指定多个全局变量。例如
globalx,y,z

3.5创建你自己的模块

个模块应该被放置在我们输入它的程序的同一个目录中,或者在
sys.path
所列目录之一
#!/usr/bin/python

#Filename:mymodule.py


def
sayhi
():

print
'Hi,thisismymodulespeaking.'


version='0.1'


#Endofmymodule.py


说明:文件名.py相当于类名/结构名,里面的函数相当于成员函数,里面的变量相当于成员变量。

3.6使用自己的模块

#!/usr/bin/python

#Filename:mymodule_demo.py


import
mymodule


mymodule.sayhi()

print
'Version'
,mymodule.version

4数据结构

4.1列表【中括号】

由于你可以增加或删除项目,我们说列表是可变的数据类型,即这种类型是可以被改变的。
你可以在列表中添加任何种类的对象包括数甚至其他列表。
shoplist=['apple','mango','carrot','banana']


print'Ihave',len(shoplist),'itemstopurchase.'


print'Theseitemsare:',#Noticethecommaatendoftheline

foriteminshoplist:

printitem,


print'/nIalsohavetobuyrice.'

shoplist.append('rice')

print'Myshoppinglistisnow',shoplist

shoplist.sort()
这个方法影响列表本身,而不是返回一个修改后的列表

olditem=shoplist[0]

del
shoplist[0]




i=[]

i.append('item')


4.2列表综合

通过列表综合,可以从一个已有的列表导出一个新的列表。例如,你有一个数的列表,而你想要得到一个对应的列表,使其中所有大于2的数都是原来的2倍。对于这种应用,列表综合是最理想的方法。

listone=[2,3,4]

listtwo=[2*iforiinlistoneifi>2]

print
listtwo


4.3元组(小括号)

元组和列表十分类似,只不过元组和字符串一样是不可变的即你不能修改元组。元组通过圆括号中用逗号分割的项目定义

age=22

name='Swaroop'

print
'%sis%dyearsold'
%(name,age)


4.4字典{大括号},引用时用[中括号]

字典类似于你通过联系人名字查找地址和联系人详细情况的地址簿,即,我们把(名字)和(详细情况)联系在一起。注意,键必须是唯一的,就像如果有两个人恰巧同名的话,你无法找到正确的信息。

注意,你只能使用不可变的对象(比如字符串)来作为字典的键,但是你可以不可变或可变的对象作为字典的值。基本说来就是,你应该只使用简单的对象作为键。

d={key1:value1,key2:value2}


注意它们的键/值对用冒号分割,而各个对用逗号分割,所有这些都包括在花括号中

ab={'Swaroop':'swaroopch@byteofpython.info',

'Larry':'larry@wall.org',

'Matsumoto':'matz@ruby-lang.org',

'Spammer':'spammer@hotmail.com'

}

print"Swaroop'saddressis%s"%ab['Swaroop']


#Addingakey/valuepair

ab['Guido']='guido@python.org'
添加


#Deletingakey/valuepair

delab['Spammer']
删除


print'/nThereare%dcontactsintheaddress-book/n'%len(ab)

forname,addressinab.
items
():

print'Contact%sat%s'%(name,address)


if'Guido'inab:#ORab.has_key('Guido')

print"/nGuido'saddressis%s"%ab['Guido']


4.5序列

列表、元组和字符串都是序列,

索引同样可以是负数,在那样的情况下,位置是从序列尾开始计算的。

因此,
shoplist[-1]
表示序列的最后一个元素而
shoplist[-2]
抓取序列的倒数第二个项目

name='swaroop'

print
'characters1to3is'
,name[1:3]

print
'characters2toendis'
,name[2:]

print
'characters1to-1is'
,name[1:-1]

print
'charactersstarttoendis'
,name[:]


注意,返回的序列从开始位置开始,刚好在结束位置之前结束。即开始位置是包含在序列切片中的,而结束位置被排斥在切片外

for
iinrange(1,5):

print
i

else
:

print
'Theforloopisover'


range(1,5)
给出序列
[1,2,3,4]


如果我们为
range
提供第三个数,那么它将成为步长。例如,
range(1,5,2)
给出
[1,3]

4.6列表引用与复制

shoplist=['apple','mango','carrot','banana']

mylist=shoplist
引用


mylist=shoplist[:]#makeacopybydoingafullslice
复制


4.7字符串

name='Swaroop'#Thisisastringobject


ifname.startswith('Swa'):

print'Yes,thestringstartswith"Swa"'


if'a'inname:

print'Yes,itcontainsthestring"a"'


ifname.find('war')!=-1:

print'Yes,itcontainsthestring"war"'


delimiter='_*_'

mylist=['Brazil','Russia','India','China']

printdelimiter.join(mylist)


最后一行结果:
Brazil_*_Russia_*_India_*_China


4.8DocStrings

def
printMax
(x,y):

'''Printsthemaximumoftwonumbers.


Thetwovaluesmustbeintegers.'''

x=int(x)#converttointegers,ifpossible

y=int(y)


if
x>y:

print
x,'ismaximum'

else
:

print
y,'ismaximum'


printMax(3,5)

print
printMax.__doc__


输出:
5ismaximum
Printsthemaximumoftwonumbers.

Thetwovaluesmustbeintegers.

5使用类

5.1成员函数

类中的函数
第一个参数都是
self


classPerson:

def__init__(self,name):

self.name=name

defsayHi(self):

print'Hello,mynameis',self.name


p=Person('Swaroop')

成员函数中的第一个变量
self
指当前类
那个对象
相当于
this


__init__这个名称的开始和结尾都是双下划线构造函数

__del__析够函数

当对象不再被使用时,
__del__
方法运行,但是很难保证这个方法究竟在什么时候运行。如果你想要指明它的运行,你就得使用
del
语句,就如同我们在以前的例子中使用的那样

5.2成员变量

有两种类型的域——类的变量(静态变量)和对象的变量,

它们根据是类还是对象拥有这个变量而区分

类的变量(相当于静态变量):在类中用类名.变量应用需要先定义

在C++成员变量定义位置初始化

对象的变量:在类中用self.变量使用

在成员函数中直接用self引用,不需要先定义

能使用
self
变量来参考同一个对象的变量和方法。这被称为属性参考

5.3公共变量与私有变量

Python中所有的类成员(包括数据成员)都是公共的,所有的方法都是有效的,如果你使用的数据成员名称以双下划线前缀比如
__privatevar
,Python的名称管理体系会有效地把它作为私有变量

6继承

为了使用继承,我们把基本类的名称作为一个元组跟在定义类时的类名称之后。然后,我们注意到基本类的
__init__
方法专门使用
self
变量调用,这样我们就可以初始化对象的基本类部分。这一点十分重要——Python不会自动调用基本类的constructor,你得亲自专门调用它。

如果在继承元组中列了一个以上的类,那么它就被称作多重继承。

class
SchoolMember
:


pass


class
Teacher
(SchoolMember):


pass






7文件操作

7.1读一般文件

poem='''/

Programmingisfun

Whentheworkisdone

ifyouwannamakeyourworkalsofun:

usePython!

'''


f=file('poem.txt','w')#openfor'w'riting

f.write(poem)#writetexttofile

f.close()#closethefile


f=file('poem.txt')

#ifnomodeisspecified,'r'eadmodeisassumedbydefault

whileTrue:

line=f.readline()

iflen(line)==0:#ZerolengthindicatesEOF

break

printline,

#NoticecommatoavoidautomaticnewlineaddedbyPython

f.close()#closethefile


7.2读INI文件

importConfigParser

filename=’c:my.ini’
config=ConfigParser.ConfigParser()
config.readfp(open(fileName))
execTimes=config.get("GLOBAL_CONFIG","execTimes")

8持久化对象-储存器

Python提供一个标准的模块,称为
pickle
。使用它你可以在一个文件中储存任何Python对象,之后你又可以把它完整无缺地取出来。这被称为持久地储存对象

还有另一个模块称为
cPickle
,它的功能和
pickle
模块完全相同,只不过它是用C语言编写的,因此要快得多(比
pickle
快1000倍)。

importcPickleasp

#importpickleasp


shoplistfile='shoplist.data'

#thenameofthefilewherewewillstoretheobject


shoplist=['apple','mango','carrot']


#Writetothefile

f=file(shoplistfile,'w')

p.dump(shoplist,f)
#dumptheobjecttoafile

f.close()


delshoplist#removetheshoplist


#Readbackfromthestorage

f=file(shoplistfile)

storedlist=p.load(f)

printstoredlist


调用储存器模块的
dump
函数,把对象储存到打开的文件中。这个过程称为储存。

接下来,我们使用
pickle
模块的
load
函数的返回来取回对象。这个过程称为取储存。



9异常

如果某个错误或异常没有被处理,默认的Python处理器就会被调用。它会终止程序的运行,并且打印一个消息,我们已经看到了这样的处理。


importsys


try:

s=raw_input('Entersomething-->')

exceptEOFError:

print'/nWhydidyoudoanEOFonme?'

sys.exit()#exittheprogram

except:

print'/nSomeerror/exceptionoccurred.'

#here,wearenotexitingtheprogram


print'Done'


引发异常
你可以使用
raise
语句引发异常。你还得指明错误/异常的名称和伴随异常触发的异常对象。你可以引发的错误或异常应该分别是一个
Error
Exception
类的直接或间接导出类。

classShortInputException(Exception):

'''Auser-definedexceptionclass.'''

def__init__(self,length,atleast):

Exception.__init__(self)

self.length=length

self.atleast=atleast


try:

s=raw_input('Entersomething-->')

iflen(s)<3:

raiseShortInputException(len(s),3)

#Otherworkcancontinueasusualhere

except
EOFError:

print'/nWhydidyoudoanEOFonme?'

exceptShortInputException,x:
异常类,异常变量

print'ShortInputException:Theinputwasoflength%d,/

wasexpectingatleast%d'%(x.length,x.atleast)

else:

print'Noexceptionwasraised.'


finally
:


pass

10os模块

这个模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下运行。一个例子就是使用
os.sep
可以取代操作系统特定的路径分割符。

下面列出了一些在
os
模块中比较有用的部分。它们中的大多数都简单明了。

·
os.name
字符串指示你正在使用的平台。比如对于Windows,它是
'nt'
,而对于Linux/Unix用户,它是
'posix'

·
os.getcwd()
函数得到当前工作目录,即当前Python脚本工作的目录路径。
·
os.getenv()
os.putenv()
函数分别用来读取和设置环境变量。
·
os.listdir()
返回指定目录下的所有文件和目录名。
·
os.remove()
函数用来删除一个文件。
·
os.system()
函数用来运行shell命令。
·
os.linesep
字符串给出当前平台使用的行终止符。例如,Windows使用
'/r/n'
,Linux使用
'/n'
而Mac使用
'/r'

·
os.path.split()
函数返回一个路径的目录名和文件名
·
os.path.isfile()
os.path.isdir()
函数分别检验给出的路径是一个文件还是目录。类似地,
os.path.existe()
函数用来检验给出的路径是否真地存在。
你可以利用Python标准文档去探索更多有关这些函数和变量的详细知识。你也可以使用
help(sys)
等等。

11其他

11.1特殊的方法

__init__(self,...)
这个方法在新建对象恰好要被返回使用之前被调用。
__del__(self)
恰好在对象要被删除之前调用。
__str__(self)
在我们对对象使用print语句或是使用str()的时候调用。
__lt__(self,other)
当使用小于运算符(<)的时候调用。类似地,对于所有的运算符(+,>等等)都有特殊的方法。
__getitem__(self,key)
使用x[key]索引操作符的时候调用。
__len__(self)
对序列对象使用内建的len()函数的时候调用。

11.2lambda形式

lambda
语句被用来创建新的函数对象,并且在运行时返回它们。

11.3exec和eval语句

exec
语句用来执行储存在字符串或文件中的Python语句。例如,我们可以在运行时生成一个包含Python代码的字符串,然后使用
exec
语句执行这些语句。下面是一个简单的例子。

>>>exec'print"HelloWorld"'


HelloWorld


eval
语句用来计算存储在字符串中的有效Python表达式。下面是一个简单的例子。

>>>eval('2*3')

6

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐