2019.5.8_此书真乃宝书也_从定位参数到仅限关键字参数
《摘自流暢的Python》 此書真乃寶書也,雖說(shuō)還是有點(diǎn)兒沒(méi)懂
從定位參數(shù)到僅限關(guān)鍵字參數(shù)
Python最好的特性之一是提供了極為靈活的參數(shù)處理機(jī)制,而且Python3進(jìn)一步提供了僅限關(guān)鍵字參數(shù)(keyword-only argument)。與之密切相關(guān)的是,調(diào)用函數(shù)時(shí)使用*和**“展開”可迭代對(duì)象,映射到單個(gè)參數(shù)。下面實(shí)例中代碼展示這些特性,實(shí)際使用在第二個(gè)例子中。
[例5-11] tag函數(shù)用于生成HTML標(biāo)簽,使用名為cls的關(guān)鍵字參數(shù)傳入“class”屬性,這是一種變通方法,因?yàn)椤癱lass”是Python的關(guān)鍵字:
def tag(name, *content, cls=None, **attrs):"""生成一個(gè)或多個(gè)HTML標(biāo)簽"""if cls is not None:attrs['class'] = clsif attrs:attr_str = ''.join('%s="%s"' % (attr, value)for attr, valuein sorted(attrs.items()))else:attr_str = ''if content:return '\n'.join('<%s%s>%s</%s>' % (name, attr_str, c, name) for c in content)else:return '<%s%s />' % (name, attr_str) 復(fù)制代碼tag 函數(shù)的調(diào)用方式很多,例子如下:
>>> tag('br') # 傳入單個(gè)參數(shù),生成一個(gè)指定名稱的空標(biāo)簽 '<br />'>>> tag('p', 'hello') # 第一個(gè)參數(shù)后面的任意個(gè)參數(shù)會(huì)被*content捕獲,存到一個(gè)數(shù)組 '<p>hello</p>'>>> print(tag('p', 'hello', 'world')) <p>hello</p> <p>world</p>>>> tag('p', 'hello', id=33) '<p id=33>hello</p>' >>> # tag函數(shù)簽名中沒(méi)有明確指定名稱的關(guān)鍵字參數(shù)會(huì)被**attrs捕獲,存入字典>>> print(tag('p', 'hello', 'world', cls='sidebar')) # cls參數(shù)只能作為關(guān)鍵字參數(shù)傳入 <p class='sidebar'>hello</p> <p class='sidebar'>world</p>>>> tag(content='testing', name='img') # 調(diào)用tag函數(shù),即便第一個(gè)定位參數(shù)也能作為關(guān)鍵字參數(shù)傳入 '<img content="testing", name="img">'>>> # 在 my_tag 前面加上**, 字典中的所有元素作為單個(gè)參數(shù)傳入, >>> # 同名鍵會(huì)綁定到對(duì)應(yīng)的參數(shù)具體參數(shù)上,其余的則被**attrs 捕獲 >>> my_tag = {'name':'img', 'title':'Sunset Boulevard', ... 'src':'sunset.jpg', 'cls':'framed'} >>> tag(**my_tag) '<img class="framed" src="sunset.jpg", title="Sunset Boulevard" />' 復(fù)制代碼僅限關(guān)鍵字參數(shù)是Python3新增的特性,在上例中,cls參數(shù)只能通過(guò)關(guān)鍵字參數(shù)指定,它一定不會(huì)捕獲未命名的定位參數(shù)。定義函數(shù)時(shí)若想指定僅限關(guān)鍵字參數(shù),要把它們放到前面*的參數(shù)后面。如果不想支持?jǐn)?shù)量不定的定位參數(shù),但是想支持僅限關(guān)鍵字參數(shù),在簽名后面放一個(gè)*,如下所示:
def f(a, *, b): return a, b f(1, b=2) (1, 2) 復(fù)制代碼注意,僅限關(guān)鍵字參數(shù)不一定要有默認(rèn)值,可以像上例中的b一樣,強(qiáng)制必須傳入實(shí)參。
接下來(lái)說(shuō)明函數(shù)參數(shù)的內(nèi)省,以一個(gè)Web框架中的實(shí)例為引子,接著討論內(nèi)省。
總結(jié)
以上是生活随笔為你收集整理的2019.5.8_此书真乃宝书也_从定位参数到仅限关键字参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 前端学习(3123):react-hel
- 下一篇: Multi-Scale Boosted