>>> print "isn't that grand"
isn't that grand #不需要转义的#为了让文字符扩展到多行,可以在一行的末尾使用反斜线符号,意味着下面一行是上面字符串的延续。#换行符 /n#用一对连续的三引用符号将字符串圈起来可以,文本将按照原貌存储。“”“大三大四的”“”#在字符前面加R或者r,表示该字符串是一个“原”字符串,即使其中包含转义字符,也将被忽略。#在前面加U或者u,使之成为Unicode字符串#通过索引访问单个字符 mystr[i]#字符串的切片操作 mystr[i:j:k],第三个参数可以没有,表示步长。当步长为负数时,必须让开始索引大于结束索引#字符串遍历操作 for c in mystr:#拼接:mystr+'odl'#多次重复:‘xo’*3#用mystr.isdigit() 测试字符串的内容,如果mystr不是空的而且所有字符都是数字,将返回true。#改成大写操作 mystr.upper()#计算字符串出现的次数 mystr.count('needle') 计算‘needle’在mystr中出现的次数#可以用mystr.splitlines()将字符串分隔成多个单行字符串并植入一个列表中#用join重新生成一个庞大的字符串--将一个字符转换为相应的ASCII或者Unicode码ASCII;直接使用内置的函数 ord(i)Unicode:同上 chr(97),返回对应的ASCII把数字的Unicode码转化为长度为1的Unicode字符串,使用 unichr()return isinstance(anobj,basestring) #判断anobj是不是 字符串
--字符串的对齐str.ljust(20)str.rjust(20)str.center(20) 也可以用str.center(20,'+')--去除字符串两端的空格str.lstrip() #去除左边的空格str.rstrip() #去除右边的空格str.strip() #去除两边的空格例:x='xyxxyy hejyx yyx' print '|'+x.strip('xy')+'|' | hejyx | #只有开头的x y 被真正移除,开头和结尾 的空格被保留下来了--合并字符串str.join(pieces)str='%s%s something %s yet'%(piece,piece2,piece3)str=piece1+piece2+piece3; #尽量不使用这种方法,(性能问题)pow(2,3) #2^3运算
abs(-10)=10 #求绝对值round(1.0/2.0)=1.0 #把浮点数四舍五入为最接近的整数值import mathmath.floor (32.9)=32.0 #取整操作>>> from math import sqrt #这种形式可以直接使用函数,不需要模块名
>>> sqrt(9)3.0 #开方nan #not a number
temp=42
>>> print 'asdas'+'temp'asdastemp #字符串的拼接 temp用的是单引号temp=42
>>>print 'as'+`temp` #这里temp用的是反引号(反引号在tab键上面)as42str,repr和反引号是把python值变为字符串的三种方法
raw_input与input的区别:input会假设用户输入的是合法的python表达式,输入字符串的时候要加引号的
而raw_input会把所有的输入当做原始数据(尽可能用这个)>>> print r"adas\"
SyntaxError: EOL while scanning string literal>>> print r"sads"sads #原始字符串的结尾不能有\,如果需要的话需要对其进行转义>>> print r"dsa\\"dsa\\ #虽然进行了转义但是居然出现了两个\\>>> print r'asd' '\\' #这样就可以出新一个\asd\#两种相同类型的序列才能进行操作,列表与字符串不能操作的
>>> 'world'+[1,2,3]Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module> 'world'+[1,2,3]TypeError: cannot concatenate 'str' and 'list' objects#None表示什么都没有,N大写。以下表示初始化一个长度为10的列表
>>> s=[None]*10>>> s[None, None, None, None, None, None, None, None, None, None]#判断某个值是否在序列中
>>> users=['foo','shan','lan']>>> raw_input('Enter your name')in usersEnter your nameshanTrue#检查用户名和PIN码
datebase=[['shan','1111'],['lan','2222'],['jie','3333']]username=raw_input('username:')pin=raw_input('Pin code:')if[username,pin] in datebase:print 'Access granted'输出:username:shan
Pin code:1111Access granted>>>#根据字符串创建列表
>>> list('hello')['h', 'e', 'l', 'l', 'o']#列表的删除操作
>>> name=['shan','lan','jie']>>> del name[1]>>> name['shan', 'jie']#切片赋值,插入新元素
>>> numbers=[1,5]>>> numbers[1:1]=[2,3,4]>>> numbers[1, 2, 3, 4, 5]#在列表末尾追加新元素
>>> lis=[1,2]>>> lis.append(4)>>> lis[1, 2, 4]#统计某个元素在列表中出现的次数
>>> ['q','q','q','w','w'].count('q')3#拓展列表
>>> a=[1,2,3]>>> b=[4,5,6]>>> a.extend(b)>>> a[1, 2, 3, 4, 5, 6]或者>>> a=[1,2]>>> b=[3,4]>>> a[len(a):]=b>>> a[1, 2, 3, 4]#寻找某个值的索引
>>> name=['shan','lan','jie']>>> name.index('shan')0#将对象插入列表
>>> name=['shan','lan','jie']>>> name.insert(1,"ssss")>>> name['shan', 'ssss', 'lan', 'jie']#列表的移除操作之pop (pop是有返回值的)
>>> name=['shan','lan','jie']>>> name.pop() #默认是移除最后一个'jie'>>> name['shan', 'lan']>>> name.pop(0)'shan'>>> name['lan'] PS;pop和append正好相对>>> x=[1,2,3]>>> x.append(x.pop())>>> x[1, 2, 3] #列表元素的移除操作之remove (remove是没有返回值的)>>> name=['shan','lan','jie']>>> name.remove('shan')>>> name['lan', 'jie']#列表元素的反向操作
>>> x=[1,2,3]>>> x.reverse()>>> x[3, 2, 1] #列表元素的排序>>> y=['1','2','8','4','3','9']>>> y.sort()>>> y['1', '2', '3', '4', '8', '9']PS :当用户需要一个排序好的列表副本,同时有保留原列表不变的时候>>> x=['1','2','8','4','3','9']>>> y=x.sort()>>> print yNone #是错的!说明sort()返回的是空值#正确做法,先做一个副本给y,在让y排序>>> x=['1','2','8','4','3','9']>>> y=x[:]>>> y.sort()>>> x['1', '2', '8', '4', '3', '9']>>> y['1', '2', '3', '4', '8', '9']#简单的赋值是没有用的>>> x=['1','2','8','4','3','9']>>> y=x>>> y.sort()>>> y['1', '2', '3', '4', '8', '9']>>> x['1', '2', '3', '4', '8', '9']#另一种获取已排序的列表副本的方法是使用sorted(),它可以返回列表>>> x=['1','2','8','4','3','9']>>> y=sorted(x)>>> x['1', '2', '8', '4', '3', '9']>>> y['1', '2', '3', '4', '8', '9']#按照关键字排序>>> name=['shan','lan','ji','aaaaa']>>> name.sort(key=len)>>> name['ji', 'lan', 'shan', 'aaaaa']>>> x=['1','2','8','4','3','9']>>> x.sort(reverse=True)>>> x['9', '8', '4', '3', '2', '1']#把序列转化为元组
>>> tuple([1,2,3])(1, 2, 3)>>> tuple('abc')('a', 'b', 'c')>>> tuple((1,2,3))(1, 2, 3)#字符串是不能改变的
>>> name='shanlanjie'>>> name[-3:]='sss'Traceback (most recent call last):
File "<pyshell#127>", line 1, in <module> name[-3:]='sss'TypeError: 'str' object does not support item assignment#字符串的查找
>>> name='i am shanlanjie'>>> name.find('shanlanjie')5>>> name='i am shanlanjie am i'>>> name.find('am',2) #提供起始点2>>> name.find('shanlanjie',0,5)-1 #提供起始点和终止点 #字符串的join方法>>> add='+'>>> name=['shan','lan','jie'] #这个地方必须是字符串>>> add.join (name)'shan+lan+jie'#把字符串变成小写
>>> 'DSADSADSAD'.lower()'dsadsadsad'#标题转换
>>> 'i am shanlanjie'.title()'I Am Shanlanjie'#子字符串的替换
>>>'i am shanlanjie'.replace('am','am not')'i am not shanlanjie'#将字符串分割成序列
>>> '1+2+3+4+5'.split('+')['1', '2', '3', '4', '5']#dict函数创建字典
>>> items=[('name','shanlanjie'),('age',21)]>>> d=dict(items)>>> d{'age': 21, 'name': 'shanlanjie'}>>> d['name']'shanlanjie'>>> d=dict(name='shanlanjie',age=21) #这是通过关键字参数创建字典>>> d{'age': 21, 'name': 'shanlanjie'}#字典的格式化字符串
>>> name={'shan':'1111','lan':'2222','jie':'3333'}>>> "big shan's phone number is %(lan)s."% name"big shan's phone number is 2222."#(字典)clear清除所有项
>>> name={'shan':'1111','lan':'2222','jie':'3333'}>>> f=name.clear()>>> name{}>>> f>>> print fNone#(字典)的copy方法。(浅复制)
>>> x={'name':'admin','numbers':['1111','2222','3333']}>>> y=x.copy()>>> y['name']='shanlanjie' #当在副本替换值的时候,原始字典不变>>> y['numbers'].remove('1111') #当在副本改变值的时候,原始字典将会改变>>> y{'name': 'shanlanjie', 'numbers': ['2222', '3333']}>>> x{'name': 'admin', 'numbers': ['2222', '3333']}#建立空字典
>>> {}.fromkeys(['name','age']){'age': None, 'name': None} #默认是None>>> {}.fromkeys(['name','age'],'sadsd'){'age': 'sadsd', 'name': 'sadsd'}>>>#用get做字典的查询
>>> d={}>>> >>> print d.get('name')None #默认是None>>> d['name']='shan'>>> d.get('name')'shan'>>> d.get('age','21')'21' #改变默认值>>>#用has_key查询字典中是否含有某个值
>>> name={'shan':'1111','lan':'2222','jie':'3333'}>>> name.has_key('shan')True#items方法将所有子典项以列表方式返回,返回时没有特殊顺序
>>> name={'shan':'1111','lan':'2222','jie':'3333'}>>> name.items()[('lan', '2222'), ('jie', '3333'), ('shan', '1111')]#iteritems返回的是迭代器
>>> name={'shan':'1111','lan':'2222','jie':'3333'}>>> it=name.iteritems()>>> it<dictionary-itemiterator object at 0x020B2AE0>>>> list(it)[('lan', '2222'), ('jie', '3333'), ('shan', '1111')]#字典的pop,删除某一个对象
>>> name={'shan':'1111','lan':'2222','jie':'3333'}>>> name.pop('shan')'1111'>>> name{'lan': '2222', 'jie': '3333'}#字典的popitem (随机弹出一个删除,字典是没有顺序的)
>>> name={'shan':'1111','lan':'2222','jie':'3333'}>>> name.popitem()('lan', '2222')>>> name{'jie': '3333', 'shan': '1111'}#字典的setdefault用法
>>> d={}>>> d.setdefault('name','shanlanjie')'shanlanjie' #当键不存在时,返回默认值>>> d{'name': 'shanlanjie'}>>> d.setdefault('name','NN')'shanlanjie' #当键存在时,返回键值>>> d{'name': 'shanlanjie'}>>> d={}>>> print d.setdefault('name') None #默认值是None#字典的update
>>> name={'shan':'1111','lan':'2222','jie':'3333'}>>> x={'shan':'4444'}>>> name.update(x) #用x更新name>>> name{'lan': '2222', 'jie': '3333', 'shan': '4444'}#用values以列表的形式返回字典中的值(可重复)
>>> name={'shan':'1111','lan':'2222','jie':'3333','big':'1111'}>>> name.values()['1111', '2222', '3333', '1111']#is运算符 判定的是同一性而不是相等性 x,y,z虽然值相等,但是不是同一个对象
>>> x=y=[1,2,3]>>> z=[1,2,3]>>> x==yTrue>>> x is yTrue>>> x is z #用==判断是否相等,用is判断是不是同一个对象False#range()
>>> range(0,10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] #包含上线,不包含下线#循环遍历字典元素
>>> name={'shan':'1111','lan':'2222','jie':'3333'}>>> for key in name: print key,'sdsad',name[key]lan sdsad 2222jie sdsad 3333shan sdsad 1111或者>>> name={'shan':'1111','lan':'2222','jie':'3333'}>>> for key,value in name.items(): print key,'dassad',value
lan adssa valuejie adssa valueshan adssa value
#并行迭代
>>> name=['shan','lan','jie']>>> ages=[12,15,34]>>> for i in range(len(name)): print name[i],'is',ages[i],'years old'shan is 12 years oldlan is 15 years oldjie is 34 years old或者>>> name=['shan','lan','jie']>>> ages=[12,15,34]>>> zip(name,ages) #用zip函数把两个序列压缩到一起[('shan', 12), ('lan', 15), ('jie', 34)]>>> for nam,age in zip(name,ages): print nam,'is',age,'years old'
shan is 12 years oldlan is 15 years oldjie is 34 years old
#翻转和排序迭代
>>> sorted([4,3,5,2])[2, 3, 4, 5]>>> sorted('hello world')[' ', 'd', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w']>>> list(reversed('hello world'))['d', 'l', 'r', 'o', 'w', ' ', 'o', 'l', 'l', 'e', 'h']>>> ''.join(reversed('hello world'))'dlrow olleh'#列表推倒式
>>> [x*x for x in range(10)][0, 1, 4, 9, 16, 25, 36, 49, 64, 81]>>> [x*x for x in range(10) if x%3==0][0, 9, 36, 81]>>> [(x,y)for x in range(3)for y in range(3)][(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]#pass 什么都不发生
#关于del
>>> name=['shan','lan','jie']>>> name2=name>>> name2['shan', 'lan', 'jie']>>> name=None #把name赋空值,但是并不是删除>>> name>>> name2 #name2与name指向同一个字典['shan', 'lan', 'jie']>>> name=['shan','lan','jie']>>> name2=name>>> del name #删除了,只是删除了名字,不会删除值的。>>> nameTraceback (most recent call last):
File "<pyshell#275>", line 1, in <module> nameNameError: name 'name' is not defined>>> name2 #python是没有办法删除值的['shan', 'lan', 'jie']#exec执行一个字符串的语句,不返回任何对象
>>> exec "print 'hello world'"hello world>>> from math import sqrt
>>> exec "sqrt=1" #干扰了命名空间>>> sqrt(4)Traceback (most recent call last):
File "<pyshell#286>", line 1, in <module> sqrt(4)TypeError: 'int' object is not callable>>> from math import sqrt
>>> scope={} #scope是作用域的意思>>> exec 'sqrt=1' in scope #把要执行的东西放到作用域,就不怕收到其他干扰了>>> sqrt(4)2.0>>> scope['sqrt']1#eval('用于求值')
>>> eval(raw_input("计算:"))计算:12+12+10*12144-----抽象
#内建函数callable判读函数是否可用>>> import math>>> x=1>>> callable(x)False>>> y=math.sqrt>>> callable(y)True#给函数写文档
def hello(name): '''shanlanjie''' return 'hello'+name #给函数提供任意多的参数def print_params(*params): print params>>> print_params(1,2,3)(1, 2, 3) #返回的是元组def print_params(**params):
print params>>> print_params(x=1,y=2,z=3){'y': 2, 'x': 1, 'z': 3} #返回的是字典#继承
class Filter: def init(self): self.blocked=[]class Spamfiter(Filter): #Spamfilter继承了Filter def init(self): #重写了超类中的init() self.blocked=['spam'] >>> issubclass(Spamfiter,Filter) #判断Spamfiter是不是Filter的子类True---正则表达式
.(点号) --通配符\ --转义字符[a-z] --匹配a-z之间的字母[^abc] --匹配除了abc之间的字符| --选择符(www\.)? --在后面加问号就变成了可选项,可以出现在匹配字符串中,但是不是必须的w* --允许重复匹配0次或者多次w+ --允许重复一次或者多次w{m,n} --允许匹配m-n次。