您好,登錄后才能下訂單哦!
這篇文章主要講解了“python參數(shù)+關(guān)鍵字參數(shù)+inspect模塊實(shí)例分析”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“python參數(shù)+關(guān)鍵字參數(shù)+inspect模塊實(shí)例分析”吧!
除了__doc__屬性, 函數(shù)對象還有很多屬性,對于下面的函數(shù),可以使用dir()查看函數(shù)具有的屬性:
>>> dir(factorial) ['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
其中大多數(shù)是Python常規(guī)類都有的屬性,下面重點(diǎn)看看常規(guī)對象沒有而函數(shù)對象有的屬性:
>>> class C:pass ... >>> obj = C() >>> def func():pass ... >>> sorted(set(dir(func)) - set(dir(obj))) # 計(jì)算差集,然后排序 ['__annotations__', '__call__', '__closure__', '__code__', '__defaults__', '__get__', '__globals__', '__kwdefaults__', '__name__', '__qualname__']
對于上面列出的函數(shù)特有屬性,說明如下:
__annotations__ dict 參數(shù)和返回值的注釋
__call__ method-wrapper 實(shí)現(xiàn)()運(yùn)算符,即可調(diào)用對象的協(xié)議
__closure__ tuple 函數(shù)閉包,即自由變量的綁定(通常是None)
__code__ code 編譯成字節(jié)碼的函數(shù)元數(shù)據(jù)和函數(shù)定義體
__defaults__ tuple 形式參數(shù)的默認(rèn)值
__get__ method-wrapper 實(shí)現(xiàn)只讀描述符協(xié)議
__globals__ dict 函數(shù)所在的模塊中的全局變量
__kwdefaults__ dict 僅限關(guān)鍵字形式參數(shù)的默認(rèn)值
__name__ str 函數(shù)名稱
__qualname__ str 函數(shù)的限定名稱
def tag(name,*content,cls=None,**attrs): if cls is not None: attrs['class'] = cls if attrs: attrs_str = ''.join(' %s="%s" ' % (attr,value) for attr,value in sorted(attrs.items())) else: attrs_str='' if content: return '\n'.join('<%s %s >%s</%s>' % (name,attrs_str,c,name) for c in content) else: return '<%s%s />' % (name,attrs_str) print(tag('br'))#定位參數(shù) name print(tag('p','hello'))#hello 會被*conteng捕獲 存入元組content = ('hello') print(tag('p','hello','world'))#content = ('hello','world') print(tag('p','hello',id=33)) #attrs={'id':33} content = ('hello') print(tag('p','hello','world',cls='sidebar'))#cls 關(guān)鍵字傳入 cls='sidebar' print(tag(content='testing',name='img'))#第一個(gè)參數(shù)name 也能作為關(guān)鍵字傳入 #同名鍵會綁定到對應(yīng)的具名參數(shù)上,剩余的則會被**attrs捕獲 print(tag(**{'name':'img','title':'sunset boulevard','src':'sunset.jpg','cls':'framed'})) #僅限關(guān)鍵字參數(shù)是python3.0新增的特性,在上例中,cls參數(shù)只能通過關(guān)鍵字參數(shù)指定,他一定不會捕獲未命名的定位參數(shù) #定義函數(shù)時(shí)候,如果想指定僅限關(guān)鍵字參數(shù),要把它們放到*的參數(shù)后面 def f(a,*,b): return a,b ff = f(1,b=2) print(ff)
<br /> <p >hello</p> <p >hello</p> <p >world</p> <p id="33" >hello</p> <p class="sidebar" >hello</p> <p class="sidebar" >world</p> <img content="testing" /> <img class="framed" src="sunset.jpg" title="sunset boulevard" /> (1, 2)
def tag(name,*content,cls=None,**attrs): if cls is not None: attrs['class'] = cls if attrs: attrs_str = ''.join(' %s="%s" ' % (attr,value) for attr,value in sorted(attrs.items())) else: attrs_str='' if content: return '\n'.join('<%s %s >%s</%s>' % (name,attrs_str,c,name) for c in content) else: return '<%s%s />' % (name,attrs_str) import inspect sig = inspect.signature(tag) print(sig) my_tag = {'name':'img','title':'sun long','src':'sunlong.jpg','cls':'framed'} bound_args = sig.bind(**my_tag) for name,value in bound_args.arguments.items(): print(name,'=',value) print(bound_args)
inspect模塊把實(shí)參綁定給函數(shù)調(diào)用:
(name, *content, cls=None, **attrs) name = img cls = framed attrs = {'title': 'sun long', 'src': 'sunlong.jpg'} <BoundArguments (name='img', cls='framed', attrs={'title': 'sun long', 'src': 'sunlong.jpg'})>
感謝各位的閱讀,以上就是“python參數(shù)+關(guān)鍵字參數(shù)+inspect模塊實(shí)例分析”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對python參數(shù)+關(guān)鍵字參數(shù)+inspect模塊實(shí)例分析這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。