数据结构()
list用法:
shoplist = ['apple', 'mango', 'carrot', 'banana']
len(shoplist)
for item in shoplist:
shoplist.append('rice')
shoplist.sort()
shoplist[0]
元组
zoo = ('wolf', 'elephant', 'penguin')
len(zoo)
new_zoo = ('monkey', 'dolphin', zoo)
new_zoo[2][2]表示企鹅
new_zoo[2]表示zoo这个元组
字典
ab = { 'Swaroop' : '[email protected]',
'Larry' : '[email protected]',
'Matsumoto' : '[email protected]',
'Spammer' : '[email protected]'
}
ab['Guido']
del ab['Spammer']
for name, address in ab.items():
if 'Guido' in ab:
序列
索引
shoplist[0] 【0】作为该LIST得索引
切片
shoplist[0:1] 【0:1】作为切片表示从0开始1结束
参考
mylist=shoplist mylist作为shoplist的副本,mylist的item改变不会影响shoplist,而shoplist改变则会影响mylist
字符串
name='Swaroop'
if name.startswith('Swa'):
if 'a' in name:
if name.find('war')!=-1:
面向对象()
类使用class关键字创建。类的域(变量)和方法被列在一个缩进块中。
类的方法和普通函数只有一个区别,类的方法必须有一个额外的第一个参数的名称,但是在调用这个方法的时候你不为这个参数赋值,由PYTHON提供这个值,这个特别的变量指对象本身,按照惯例他的名称是self
有一个类MyClass和这个类的对象MyObject :MyObject.method(arg1,arg2)的时候python自动转化为MyClaa.method(MyObject,arg1,arg2)
创建一个类:
class Person:
pass # An empty block
p=Person()
print p
输出:<__main__.Person instance at 0xf6fcb18c>
可以注意到存储对象的计算机内存地址打印出来了,因为Python可以在任何空位存储对象
使用对象的方法:
class Person:
def sayHi(self):
print 'hello,how are you?'
p=person()
p.syaHi()
注意:sayHi方法没有任何参数,但仍然在函数定义时有self。
__init__方法和__del__方法
class Person:
def __init__(self,name):
self.name=name
def sayHi(self):
print 'hello,my name is',self.name
p=Person('Swaroop')
p.sayHi()
输出:hello,my name is Swaroop
__init__()方法,只是在创建类的新实例的时候,把参数包括在括号内跟在类名后面,从而传递给_init()方法。ps相当于:java中的构造函数
__del__()方法,在对象消逝的时候调用
类和对象的方法:
类的变量和对象的变量不同:对象的变量赋值如"self.name" 而类的变量"name"
所有的类成员都是公共的 但以双下划线为前缀的数据成员如:__a,Python会有效的把他作为似有变量.
惯例:如果某个变量只想在类和对象中使用,就应该以单下划线为前缀。
继承:
class SchoolMember:
def __init__(self,name,age):
self.name=name
self.age=age
print '(Initialized SchoolMember:%s)'%self.name
del tell(self):
print 'Name:"%s" Age:"%s"'%(self.name,self.age)
class Teacher(SchoolMember):
def __init__(slef,name,age,salary)
SchoolMember.__init__(self,name,age)
self.salary=salary
del tell(self):
SchoolMember.tell(self)
print'salary:"%d"'%slef.salary
__init__方法专门使用self变量调用,这样我们就可以初始化对象的基本类部分。
这一点十分重要——Python不会自动调用基本类的constructor,必须手动自己调用。
如果在继承元组中列了一个以上的类,那么它就被称作 多重继承
输入输出()
raw_input和print 输入和输出:
文件:
file类的对象来打开一个文件,分别使用file类的方法read,readline,write方法来恰当的读写文件,完成对文件的操作时,调用close方法
poem='''write into file's content'''
f=file('poem.txt','w')
f.write(poem)
f.close()
f=file('poem.txt')
while True:
line=f.readline()
if len(line)==0:
break
print line
f.close()
注意:只读模式'r',写入模式'w',追加模式'a',不指定为只读模式.
存储器(pickle):
pickle和cPickle的区别,功能相同,cPickle(C语言写的)比pickle更快
import cPickle as p
shoplistfile='shoplist.data'
shoplist = ['apple', 'mango', 'carrot']
f = file(shoplistfile, 'w')
p.dump(shoplist,f)#dump the object to a file
f.close()
del shoplist
f=file(shoplistfile)
storedlist=p.load(f)
print storedlist
异常()
try..except:
import sys
try:
s = raw_input('Enter something --> ')
except EOFError:
print '\nWhy did you do an EOF on me?'
sys.exit() # exit the program
except:
print '\nSome error/exception occurred.'
# here, we are not exiting the program
print 'Done'
将有可能发生错误的语句放入try:语句中,用except:来处理这些错误,对于每一个try从句至少有一个except从句与其关联
引发异常:
raise语句
class ShorInputException(Exception):
def __init__(self,length,atleast):
Exception.__init__(self)
self.length=length
self.atleast=atleast
try:
s=raw_input('Enter something-->')
if len(s)<3:
raise ShorInputException(len(s),3)
except EOFError:
print '\nWhy did you do an EOF on me?'
except ShorInputException,x:
print 'ShortInputException: The input was of length %d, \
was expecting at least %d' % (x.length, x.atleast)
else:
print 'No exception was raised'
try...finally:
Python标准库()
sys模块:
os模块:
os.name返回操作系统平台
os.getcwd()返回当前工作目录
os.getenv(),os.putenv读取和设置环境变量
os.listdir返回指定目录下的所有文件和目录名
os.remove() 删除一个文件
os.system()用来运行shell命令
os.linesep字符串给出当前平台的行终止符,windows-'\r\n'linx-'\n'mac-'\r'
os.path.split()返回一个路径的目录名和文件名
os.path.isfile(),os.path.isdir()分别检测是文件还路径
os.path.existe用来检测给出的路径是否存在
更多()
特殊的方法:
__init__()
__del__()
__getitem__()可以用来获取元组或list相对位置的值
在函数中接收元组和列表:
当要使函数接收元组或字典形式的参数的时候,有一种特殊的方法,它分别使用*和**前缀。这种方法在函数需要获取可变数量的参数的时候特别有用。
def powersum(power, *args):
total=0
for i in args:
total+=pow(i,power)
return total
>>> powersum(2,3,4)
25
>>> powersum(2,10)
100
由于args变量前有*前缀,所有多余的函数参数都会作为一个元组存在args中,如果**为前缀,那么对于的参数会被认为是字典的键/值对
lambda形式:
def make_repeater(n):
return lambda s:
s*n
twice=mak_repeater(2)
print twice('word')
print twice(5)
输出:wordword
10
注意:lambda语句用来创建函数对象,lambda需要一个参数(s)这个参数作为函数体,而表达式的质被这个新建的函数返回。注意即便是print语句也不能用在lambda形式中,只能使用表达式.
猜想:
exec和eval语句:
>>>exec 'print "hello world"'
hello world
>>>eval('2*3')
6
exec用来执行存储在文件或字符串中的python语句
eval用来执行存储在字符串中的python表达式