?
?
?
Nov.3 regular expression
十六進(jìn)制轉(zhuǎn)義碼位
1、\xac 轉(zhuǎn)義兩位十六進(jìn)制數(shù)
2、\u1234 轉(zhuǎn)義四位十六進(jìn)制數(shù)
3、\U00008000 轉(zhuǎn)義八位(必須八位)十六進(jìn)制數(shù)
1、字符串 索引與切片差異
使用過大的索引會產(chǎn)生一個錯誤:
word = 'Python'
word[42] # the word only has 6 characters
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
但是,切片中的越界索引會被自動處理:
>>> word[4:42]
'on'
>>> word[42:]
''
模塊是一個包含 Python 定義和語句的文件。文件名就是模塊名后跟文件后綴 .py 。在一個模塊內(nèi)部,模塊名(作為一個字符串)可以通過全局變量_name_ 的值獲得
?
?
?
Nov.3 聲明編碼
#!/usr/bin/env python
# -*- coding: latin-1 -*-
??python默認(rèn)情況下支持用UTF-8編寫源代碼,但是如果聲明使用的編碼,則幾乎可以使用任何編碼。這是通過包含一個特殊的注釋作為源文件的第一行或第二行來實現(xiàn)的:
??UTF-8、latin-1 支持100多種編碼格式。聲明UTF-8是為里兼容Python 2.x。
??該語法的靈感來自于Emacs用于指定文件本地變量的符號。Emacs支持許多不同的變量,但是Python只支持“編碼”。-*-符號向Emacs表明注釋是特殊的;它們對Python沒有任何意義,只是一種約定。Python在注釋中查找編碼:name或coding=name。
?
?
?
Nov.2 python 序列的概念
- 列表
- 這些格式寫法,開頭的單個值、元組或者列表都相當(dāng)于一個寄存器,每循環(huán)完一輪就形成一個序列
arry= [x**2 for x in range(10)]
>>>[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
>>> [(x, x**2) for x in range(6)]
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]
>>> [[3*x+1,3*x+2,3*x+3] for x in range(3)]
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> vec = [[1,2,3], [4,5,6], [7,8,9]]
>>> [num for elem in vec for num in elem]
[1, 2, 3, 4, 5, 6, 7, 8, 9] # 二維數(shù)組轉(zhuǎn)一維數(shù)組 工能非常強(qiáng)大
- 解包參數(shù)列表
- 內(nèi)置的 range() 函數(shù)需要單獨(dú)的 start 和 stop 參數(shù)。如果它們不能單獨(dú)使用,可以使用 *-操作符來編寫函數(shù)調(diào)用以便從列表或元組中解包參數(shù):
>>> args = [3, 6]
>>> list(range(*args)) # call with arguments unpacked from a list
[3, 4, 5]
>>> matrix = [
... [1, 2, 3, 4],
... [5, 6, 7, 8],
... [9, 10, 11, 12],
... ]
>>> [[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]] #[row[i] 相當(dāng)于寄存器,當(dāng)i=0時,row[0]在matrix 循環(huán)取值并存儲為一個列表,依次循環(huán),可以取到每一列的值,形成行列互換
>>> list(zip(*matrix))
[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]
- 元組
- 語句 t = 12345, 54321, 'hello!' 是 元組打包的一個例子:值 12345, 54321 和 'hello!' 被打包進(jìn)元組。其逆操作也是允許的
x, y, z = t
print(x)
12345
- 這被稱為 序列解包也是很恰當(dāng)?shù)?,因為解包操作的等號右?cè)可以是任何序列。序列解包要求等號左側(cè)的
- 變量數(shù)與右側(cè)序列里所含的元素數(shù)相同。注意可變參數(shù)其實也只是元組打包和序列解包的組合。
-集合
- 花括號或 set() 函數(shù)可以用來創(chuàng)建集合。注意:要創(chuàng)建一個空集合你只能用 set() 而不能用 {},因為 后者是創(chuàng)建一個空字典
- 字典
- 字典在其他語言里可能會被叫做 聯(lián)合內(nèi)存或 聯(lián)合數(shù)組。
- 字典是以 關(guān)鍵字為索引的,關(guān)鍵字可以是任意不可變類型,通常是字符串或數(shù)字。
- 如果一個元組只包含字符串、數(shù)字或元組,那么這個元組也可以用作關(guān)鍵字。
迭代 元組、列表、字典的方法
>>> a = ['Mary', 'had', 'a', 'little', 'lamb']
>>> for i in a:
print(i)
>>>for i in range(len(a)):
print(i,a[i])
>>> for i,v in enumerate(a):
print(i, v) # 返回索引號和對應(yīng)的值,在enumerate 關(guān)鍵字star= 可以設(shè)置起始索引
?
?
?
?
?
?
Nov.1 Template類 、str.format 方法
-
string.py
- class Formatter
- class Template
Template ?用來解決字符串多次重復(fù)性輸入問題
??Template 類位于string模塊下,僅僅是一個類的時候一般不能直接使用,必須先要將其實例化。實例化之后就可以調(diào)用這個類的一些功能和屬性。
??在使用Template類的時候,這里要被替換的文字,需用美元符號和名稱來標(biāo)注,舉例${a} 注意:英文字母開頭,字母和數(shù)字的組合,把名稱用大括號包起來可以解少歧義,需要輸出美元符號本身的時候,用$$轉(zhuǎn)義。
import string
str1=string.Template("我正在學(xué)習(xí)${a}"
",我正在學(xué)習(xí)$模塊"
",我正在學(xué)習(xí)${c}"
",我正在賺$$"
)
s=str1.substitute(a="Python",b="string",c="Template")
print(s)
?
?
str.format 函數(shù)格式化字符串
str.format() 方法和Formatter 類共享相同的格式字符串語法
字符替換系列
案例1: 普通替換
??format中的參數(shù),按照順序一一對S字符串中的{}進(jìn)行替換
s="聽孩子說勝過對{},{}說"
x=s.format("孩子","聽孩子")
print(x)
聽孩子說勝過對孩子,聽孩子說
案例2: 使用關(guān)鍵字方式替換
??不必按照依次順序,將會只按照關(guān)鍵字的對應(yīng)的地方替換
s="聽孩子說勝過對{a},說"
x=s.format(b="孩子",a="聽孩子")
print(x)
聽孩子說勝過對聽孩子,孩子說
案例3: 直接使用數(shù)字方式替換
??按照format參數(shù)索引進(jìn)行替換,第一個參數(shù)索引為0
s="聽孩子說勝過對{1},{0}說"
x=s.format("孩子","聽孩子")
print(x)
聽孩子說勝過對聽孩子,孩子說
案例4: 使用數(shù)字與關(guān)鍵字混用方式替換
??注意 混用時,在format函數(shù)中,必須要先寫數(shù)字順序?qū)?yīng)的替換內(nèi)容,然后在寫關(guān)鍵字的替換,不然會報錯!
s="聽孩子說勝過對{0},{a}說"
x=s.format("孩子",a="聽孩子")
print(x)
聽孩子說勝過對聽孩子,孩子說
案例5: 對應(yīng)列表方式替換
??列表lis 為別名,在format參數(shù)里需要與真正的列表list1對應(yīng)
list1=["孩子","聽孩子"]
s="聽孩子說勝過對{lis[1]},{lis[0]}說" #lis 為別名,在format參數(shù)里需要與真正的列表list1對應(yīng)
x=s.format(lis=list1)
print(x)
聽孩子說勝過對聽孩子,孩子說
案例6: 使用列表方式替換
??這里的對象a為別名,這個別名在format替換的時候一定要對應(yīng)到真正的對象
import math
s="PI={a.pi}"
x=s.format(a=math)
print(x)
PI=3.141592653589793
?
特殊字符的運(yùn)用
使用 ! 符號
- 使用 !a 可以轉(zhuǎn)換為unicode編碼格式
- 使用 !s 可以直接將值轉(zhuǎn)換為字符串
- 使用 !r 可以表示使用repr函數(shù)來輸出
s="{bieming!a},非常棒,{bieming1!s},{bieming2!a}"
print(s.format(bieming="金鋒",bieming1="abc",bieming2="\n"))
'\u91d1\u950b',非常棒,abc,'\n'
#目前測試Unicode編碼轉(zhuǎn)換對ASCII字符集里的字符無效。英文字母在Unicode字符集里也是有對應(yīng)code point
聯(lián)系擴(kuò)展
chr(i)
返回 Unicode 碼位為整數(shù) i 的字符的字符串格式。
例如,chr(97) 返回字符串 'a',chr(8364)返回字符串 '€'。這是ord() 的逆函數(shù)。
實參 i 的合法范圍是 0 到 1,114,111(16 進(jìn)制表示是 0x10FFFF)。
ord(i)
對表示單個 Unicode 字符的字符串,返回代表它 Unicode 碼點(diǎn)的整數(shù)。
例如 ord('a') 返回整數(shù)97,ord('€') (歐元符號)返回 8364 。這是chr() 的逆函數(shù)。
?
使用 : 符號
- 使用b代表二進(jìn)制
- 使用o代表八進(jìn)制
- 使用d代表十進(jìn)制
- 使用o代表八進(jìn)制
- 使用e代表科學(xué)計數(shù)法
- 使用%代表以百分?jǐn)?shù)表示
- 使用.xf表示保留 x 位小數(shù)
- > < ^ 的使用同format 函數(shù) 填充字符必須與對齊符號一起連用
# n可以為四種進(jìn)制數(shù)中的任何一種 在進(jìn)制符號前面加#,返回在數(shù)值前面加進(jìn)制代表符號的結(jié)果 比如 0x
s="二進(jìn)制: {n:b} 八進(jìn)制: {n:o} 十進(jìn)制: {n:d} 十六進(jìn)制: {n:#x}"
print(s.format(n=10))
二進(jìn)制: 1010 八進(jìn)制: 12 十進(jìn)制: 10 十六進(jìn)制: 0xa
print(s.format(n=0xb))
二進(jìn)制: 1011 八進(jìn)制: 13 十進(jìn)制: 11 十六進(jìn)制: b
x="{n:e}"
print(x.format(n=666666))
6.666660e+05
x="{n:%}"
print(x.format(n=0.058))
5.800000%
格式化替代嵌套使用
import math
s="{c:.u0z1t8osf}"
print(s.format(c=math.pi,d=2))
3.14
Python中的特殊字符
■inf ?+inf表示無窮大 ??-inf 無窮小
■nan?表示非數(shù)字類型
總 結(jié) :
??str.format 與 Python內(nèi)置 format 相比優(yōu)勢在與str.format可以對一整個字符串中的數(shù)字或其中某一部分進(jìn)行格式化替換,而format只能對整個字符串進(jìn)行操作,靈活度沒有str.format大。
?
str.center 方法、str.split ?方法、str.jion 方法
??str.center()方法返回一個指定的寬度 width 居中的字符串,如果 width 小于字符串寬度直接返回字符串,否則使用 fillchar 去填充fillchar 為填充的字符,默認(rèn)為空格。
語法
str.center(width[, fillchar])
參數(shù)
- width -- 字符串的總寬度。
- fillchar -- 填充字符。
實例:
str = "[www.runoob.com]"
print ("str.center(40, '*') : ", str.center(40, '*'))
str.center(40, '*') : ************[www.runoob.com]************
?
??str.split()方法通過指定分隔符對字符串進(jìn)行切片,如果第二個參數(shù) num 有指定值,則分割為 num+1 個子字符串。返回分割后的字符串列表。
語法
str.split(str="", num=string.count(str))
參數(shù)
- str -- 分隔符,默認(rèn)為所有的空字符,包括空格、換行(\n)、制表符(\t)等。
- num -- 分割次數(shù)。默認(rèn)為 -1, 即分隔所有。
實例:
str = "this is string example....wow!!!"
print (str.split( )) # 以空格為分隔符
print (str.split('i',1)) # 以 i 為分隔符
print (str.split('w')) # 以 w 為分隔符
以上實例輸出結(jié)果如下:
['this', 'is', 'string', 'example....wow!!!']
['th', 's is string example....wow!!!']
['this is string example....', 'o', '!!!']
?
??str.join()方法用于將序列中的元素以指定的字符連接生成一個新的字符串,返回通過指定字符連接序列中元素后生成的新字符串
語法
str.join(sequence)
參數(shù)
- sequence -- 要連接的元素序列。
實例:
str = "-";
seq = ("a", "b", "c"); # 字符串序列
print str.join( seq );
以上實例輸出結(jié)果如下:
a-b-c
?????????
??str.find() 方法檢測字符串中是否包含子字符串 str ,如果指定 beg(開始) 和 end(結(jié)束) 范圍,則檢查是否包含在指定范圍內(nèi),如果包含子字符串返回第一個開始的索引值,否則返回-1
語法
str.find(str, beg=0, end=len(string))
參數(shù)
- str -- 指定檢索的字符串
- beg -- 開始索引,默認(rèn)為0。
- end -- 結(jié)束索引,默認(rèn)為字符串的長度。
實例:
str1 = "this is string example....wow!!!";
str2 = "exam";
print str1.find(str2);
print str1.find(str2, 10);
print str1.find(str2, 40);
以上實例輸出結(jié)果如下:
15
15
-1
?????????
??str.index() 方法檢測字符串中是否包含子字符串 str ,如果指定 beg(開始) 和 end(結(jié)束) 范圍,則檢查是否包含在指定范圍內(nèi),該方法與 python find()方法一樣,只不過如果str不在 string中會報一個異常。
語法
str.index(str, beg=0, end=len(string))
參數(shù)
- str -- 指定檢索的字符串
- beg -- 開始索引,默認(rèn)為0。
- end -- 結(jié)束索引,默認(rèn)為字符串的長度。。
實例:
str1 = "Runoob example....wow!!!"
str2 = "exam";
print (str1.index(str2))
print (str1.index(str2, 5))
print (str1.index(str2, 10))
以上實例輸出結(jié)果如下(未發(fā)現(xiàn)的會出現(xiàn)異常信息):
7
7
Traceback (most recent call last):
File "test.py", line 8, in <module>
print (str1.index(str2, 10))
ValueError: substring not found