>>> 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 math
math.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鍵上面)
as42
str,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 users
Enter your nameshan
True
#檢查用戶名和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:1111
Access 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 y
None #是錯的!說明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 f
None
#(字典)的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==y
True
>>> x is y
True
>>> 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 2222
jie sdsad 3333
shan sdsad 1111
或者
>>> name={'shan':'1111','lan':'2222','jie':'3333'}
>>> for key,value in name.items():
print key,'dassad',value
lan adssa value
jie adssa value
shan 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 old
lan is 15 years old
jie 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 old
lan is 15 years old
jie 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 #刪除了,只是刪除了名字,不會刪除值的。
>>> name
Traceback (most recent call last):
File "<pyshell#275>", line 1, in <module>
name
NameError: 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*12
144
-----抽象
#內建函數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次。