從定位引數到僅限關鍵字引數

2021-10-07 21:22:16 字數 1885 閱讀 2672

python最好的特性之一是提供了極為靈活的引數處理機制,而且python 3進一步提供了僅限關鍵字引數(keyword-only argument).

與之密切相關的是,呼叫函式時使用*和** 「展開」可迭代物件,對映到單個引數。

#tag函式用於生成html標籤;使用名為cls的關鍵字引數傳入「class」屬性,這是一種變通方法,因為「class」是python的關鍵字

deftag

(name,

*content, cls=

none

,**attrs)

:"""生成乙個或多個html標籤"""

if cls is

notnone

: attrs[

'class'

]= cls

if attrs:

attr_str =

''.join(

' %s="%s"'

%(attr, value)

for attr, value

insorted

(attrs.items())

)else

: attr_str =

''if content:

return

'\n'

.join(

'%s'

%(name, attr_str, c, name)

for c in content)

else

:return

''%(name, attr_str)

tag函式的呼叫方式很多

#tag函式(見示例5-10)眾多呼叫方式中的幾種

>>

> tag(

'br'

)#➊ ''

>>

> tag(

'p',

'hello'

)#➋

'hello

'>>

>

print

(tag(

'p',

'hello'

,'world'))

hello<

/p>

world<

/p>

>>

> tag(

'p',

'hello',id

=33)#➌

'hello

'>>

>

print

(tag(

'p',

'hello'

,'world'

, cls=

'sidebar'))

#➍ ="sidebar"

>hello<

/p>

="sidebar"

>world<

/p>

>>

> tag(content=

'testing'

, name=

"img"

)#➎

'>>

> my_tag =

>>

> tag(

**my_tag)

#➏ '

➊ 傳入單個定位引數,生成乙個指定名稱的空標籤。

➋ 第乙個引數後面的任意個引數會被*content捕獲,存入乙個元組。

➌ tag函式簽名中沒有明確指定名稱的關鍵字引數會被**attrs捕獲,存入乙個字典。

➍ cls引數只能作為關鍵字引數傳入。

➎ 呼叫tag函式時,即便第乙個定位引數也能作為關鍵字引數傳入。

➏ 在my_tag前面加上**,字典中的所有元素作為單個引數傳入,同名鍵會繫結到對應的具名引數上,餘下的則被**attrs捕獲。

非關鍵字引數和關鍵字引數 args kw

這兩個引數的存在是方便在呼叫函式的時候可以靈活的傳參 def count numbers sum 0 for n in numbers sum sum n n return sum count 1,2,3 14 count 1,3,5,7 84如果已經有乙個list或者tuple,要呼叫乙個可變引數...

Python中關鍵字引數和命名關鍵字引數的區別

python中函式的引數有位置引數 預設引數 可變引數 命名關鍵字引數和關鍵字引數,這個順序也是定義函式時的必須順序。本文主要是講講命名關鍵字引數和關鍵字引數的區別 可變引數允許你傳入0個或任意個引數,這些可變引數在函式呼叫時自動組裝為乙個tuple。而關鍵字引數允許你傳入0個或任意個含引數名的引數...

Python引數之關鍵字引數

關鍵字引數允許我們在傳入必選引數外,還可以接受關鍵字引數kw def person name,age,kw prit name name,age age,other kw 這裡的name,age是必須的,kw可選,意味著第三個引數開始我們可以傳入任意個數的關鍵字引數 person bob 35,ci...