目錄
一、作為函式的可變引數標誌以及引數解包
二、賦值語句中作為可變變數標誌
三、在除函式引數語境外的其他語境下對可迭代物件進行解包
星號在python中的用法主要可分為三類:一是作為函式的可變引數標誌以及在函式引數的語境下對可迭代物件進行解包並進行引數傳遞(引數解包),二是作為賦值語句中的可變變數標誌,三是在非函式引數的其他特定的語境中直接對可迭代物件進行解包操作。這三種用法是在不同的python版本中不斷的新增進去的,其中後兩種用法只在3.x版本中可以使用,具體的講,用法一是在2.x和3.x都可以使用的,第二種用法是在3.0版本新增進去的,第三種用法是在3.5版本中新增進去的,所以在使用星號的不同用法時,還需要注意python的版本,以免出錯。下面對每種用法進行詳細的說明。
def f1(a,*b,**c):
print(a)
print(b)
print(c)
f1(1,2,(3,4),k1=5,k2=6)
# output:
# 1# (2,(3,4))
#
此外,如果我們要將乙個可迭代物件作為引數傳給乙個函式,在這種語境下,可以直接利用*iterable語法對可迭代物件解包,並把解包後的內容傳給函式,如下所示。要注意的是,如果解包之後的元素個數不和函式位置引數的個數相等的話,是會丟擲異常的,所以一般情況下,不建議在不含可變引數的函式中使用這種傳參方式。
def f2(a,b):
print(a)
print(b)
f2(*[1,2])
# output:
# 1# 2
f2(*[1,2,3]) # typeerror: f2() takes 2 positional argument but 3 were given
def f3(a,*b):
print(a)
print(b)
f3(*(1,2,3))
# output:
# 1# (2,3)
當我們想要對乙個可迭代物件進行拆分,並賦值給相應的變數時,我們可以用星號標記某個變數,這個變數表示可變變數,意思表示其內容是不定的,內容根據其他的變數的個數決定。因為其原理就是優先賦值給其他確定的變數,然後剩下的內容再賦值給可變變數,實際上,可變變數的內容就是對可迭代物件剩下內容解包後得到的內容,並以列表list物件返回給變數,如下所示。
a,*b=(1,2,3,4,5)
*c,d=range(5)
print(a) # output: 1
print(b) # output: [2,3,4,5]
print(c) # output: [0,1,2,3]
print(d) # output: 4
在3.5版本開始,python對星號增加新的適用場景,即在元組、列表、集合和字典內部進行對可迭代引數直接解包,這裡需要一再強調的是,這裡是在上述四個場景下才可以對可迭代引數直接解包,在其他場景下進行可迭代物件的星號解包操作時不允許的,如下所示。
a=*range(3),
b=*range(3),3
c=[*range(3)]
d=e=}
print(a) # output: (0,1,2)
print(b) # output: (0,1,2,3)
print(c) # output: [0,1,2]
print(d) # output:
print(e) # output:
還要注意的是,由於這裡只能在這些指定的場景下對可迭代物件直接解包,如果直接*range(3)是會報錯的,要區別於上述的第一條語句,注意上述第一條語句中*range(3)後面是有逗號的,所以這就表示在元組的場景下進行解包,所以是允許的。 python正規表示式用法
在這裡插入 片 re.compile pattern,flags 0 操作符說明例項.表示任何單個字元 字符集,對單個字元給出取值範圍 abc 表示a b c,a z 表示a到z單個字元 非字符集,對單個字元給出排除範圍 abc 表示非a或b或c的單個字元 前乙個字元0次或無限次擴充套件 abc 表...
正規表示式grep用法詳解
語法 grep 選項 word filename c 列印符合要求的行數 i 不區分大小寫 n 在輸出符合要求的行的同時顯示行號 v 列印不符合要求的行 a 後跟乙個數字n,表示列印符合要求的行以及下面n行 b 後跟乙個數字n,表示列印符合要求的行以及上面n行 c 後跟乙個數字n,表示列印符合要求的...
thinkPHP的表示式查詢用法詳解
thinkphp 表示式 這裡說的表示式,是指 thinkphp 框架中特有的表示式。這些表示式用於查詢或更新刪除等操作的 where條件 及模板標籤中。where 條件中使用表示式 where 條件表示式格式為 map 欄位名 array 表示式 操作條件 其中 map 是乙個普通的陣列變數,可以...