Python 3.x 零基礎(chǔ)學(xué)習(xí)過程疑問總結(jié)

?
?
?

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

      1. class Formatter
      1. 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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

友情鏈接更多精彩內(nèi)容