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...