最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python標(biāo)準(zhǔn)庫中inspect模塊的簡單說明

 更新時間:2023年08月02日 11:06:10   作者:阿常囈語  
這篇文章主要介紹了python標(biāo)準(zhǔn)庫中inspect模塊的簡單介紹,inspect模塊提供了幾個有用的函數(shù)來幫助獲取有關(guān)活動對象的信息,例如模塊,類,方法,函數(shù),回溯,框架對象和代碼對象,需要的朋友可以參考下

inspect 模塊作用

(1).對是否是模塊,框架,函數(shù)等進(jìn)行類型檢查。

(2).獲取源碼

(3).獲取類或函數(shù)的參數(shù)的信息

以下是官方文檔說明:

inspect模塊提供了幾個有用的函數(shù)來幫助獲取有關(guān)活動對象的信息,例如模塊,類,方法,函數(shù),回溯,框架對象和代碼對象。

例如,它可以幫助您檢查類的內(nèi)容,檢索方法的源代碼,提取和格式化函數(shù)的參數(shù)列表,或獲取顯示詳細(xì)回溯所需的所有信息。

inspect

可以 比較輕松 獲取 函數(shù)的參數(shù), 通過 signature(foo).bind(xxx,xxx) 就可以了.

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import inspect
def foo(a, b='ham', *args):
    pass
def test(a, *, b):
    print(a,b)
if __name__ == '__main__':
    ba = inspect.signature(foo).bind(a='spam', b='frank')
    ba.apply_defaults()
    print(ba.arguments)  # ordereddict
# OrderedDict([('a', 'spam'), ('b', 'frank'), ('args', ())])
import  inspect 
def foo(a,b,c,*args,**kw):pass
# 拿到函數(shù) 簽名 
sig  = inspect.signature(foo)
str(sig)
'(a, b, c, *args, **kw)'
## 綁定部分參數(shù),  返回一個 BoundArguments 對象 
sig.bind_partial('frank','165cm')
<BoundArguments (a='frank', b='165cm')>
ba =sig.bind_partial('frank','165cm')
## 對于丟失的參數(shù),可以設(shè)置默認(rèn)值
ba.apply_defaults()
ba.arguments
OrderedDict([('a', 'frank'), ('b', '165cm'), ('args', ()), ('kw', {})])
## signature  還有一個方法  bind
import  inspect 
def foo(a,b,c,*args,**kw):pass
sig =  inspect.signature(foo)
ba = sig.bind('frank','165cm','hello')
ba
<BoundArguments (a='frank', b='165cm', c='hello')>
ba.arguments
OrderedDict([('a', 'frank'), ('b', '165cm'), ('c', 'hello')])
# 指定默認(rèn)值 
ba.apply_defaults()
ba.arguments
OrderedDict([('a', 'frank'), ('b', '165cm'), ('c', 'hello'), ('args', ()), ('kw', {})])

bind 和 bind_partial 區(qū)別

綁定參數(shù)的,如果 用 bind 需要要所有的位置參數(shù) 都要綁定. bind_partial 可以部分進(jìn)行綁定.

import  inspect 
def foo(a,b,c,*args,**kw):pass
sig =  inspect.signature(foo)
sig
<Signature (a, b, c, *args, **kw)>
sig
<Signature (a, b, c, *args, **kw)>
sig.bind('frank','165cm')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/inspect.py", line 2968, in bind
    return args[0]._bind(args[1:], kwargs)
  File "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/inspect.py", line 2883, in _bind
    raise TypeError(msg) from None
TypeError: missing a required argument: 'c'
不支持 部分綁定參數(shù), 所以會報錯, 可以使用 sig.bind_partial
sig.bind_partial('frank','165cm')
<BoundArguments (a='frank', b='165cm')>

The args and kwargs properties can be used to invoke functions:

signature.bind() 返回一個 Boundarguments 對象. 可以通過 args , kwargs 拿到函數(shù)的所有參數(shù).

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import inspect
def test(a, *, b):
    print(a, b)
if __name__ == "__main__":
    sig = inspect.signature(test)
    ba = sig.bind(10, b=20)
    test(*ba.args, **ba.kwargs)  # 10 20
# The args and kwargs properties can be used to invoke functions  

實(shí)用方法

用來判斷 函數(shù),類,實(shí)例方法, 內(nèi)建方法, function or method等…

def ismodule(object):
def isclass(object):
def ismethod(object):
def ismethoddescriptor(object):
def isfunction(object):
def isbuiltin(object):
def isabstract(object):
def ismethoddescriptor(object):
def isroutine(object):
    """Return true if the object is any kind of function or method."""

舉個例子

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@author: Frank 
@contact: frank.chang@shoufuyou.com
@file: test_inspect.py
@time: 2018/5/14 下午1:24
"""
from inspect import getmembers, ismethod, isclass, isfunction
def foo(): pass
class Cat(object):
    def __init__(self, name='kitty'):
        self.name = name
    def sayHi(self):
        print(self.name + '  says Hi!')
    def fun1(self):
        print('fun1 is running')
if __name__ == '__main__':
    cat = Cat('frank')
    cat.sayHi()
    print(isclass(cat))  # False
    print(isclass(Cat))  # True
    print(ismethod(cat.sayHi))  # True
    print(isfunction(cat.sayHi))  # False
    print(isfunction(foo))  # true
    print(ismethod(cat.fun1))  # True

getmemory

if __name__ == '__main__':
    cat = Cat('frank')
    # print(getmembers(cat))
    for member in getmembers(cat):
        print(member)   

# 結(jié)果如下
# ('__class__', <class '__main__.Cat'>)
# ('__delattr__', <method-wrapper '__delattr__' of Cat object at 0x10b213dd8>)
# ('__dict__', {'name': 'frank'})
# ('__dir__', <built-in method __dir__ of Cat object at 0x10b213dd8>)
# ('__doc__', None)
# ('__eq__', <method-wrapper '__eq__' of Cat object at 0x10b213dd8>)
# ('__format__', <built-in method __format__ of Cat object at 0x10b213dd8>)
# ('__ge__', <method-wrapper '__ge__' of Cat object at 0x10b213dd8>)
# ('__getattribute__', <method-wrapper '__getattribute__' of Cat object at 0x10b213dd8>)
# ('__gt__', <method-wrapper '__gt__' of Cat object at 0x10b213dd8>)
# ('__hash__', <method-wrapper '__hash__' of Cat object at 0x10b213dd8>)
# ('__init__', <bound method Cat.__init__ of <__main__.Cat object at 0x10b213dd8>>)
# ('__init_subclass__', <built-in method __init_subclass__ of type object at 0x7fc8afc24358>)
# ('__le__', <method-wrapper '__le__' of Cat object at 0x10b213dd8>)
# ('__lt__', <method-wrapper '__lt__' of Cat object at 0x10b213dd8>)
# ('__module__', '__main__')
# ('__ne__', <method-wrapper '__ne__' of Cat object at 0x10b213dd8>)
# ('__new__', <built-in method __new__ of type object at 0x10afc86c0>)
# ('__reduce__', <built-in method __reduce__ of Cat object at 0x10b213dd8>)
# ('__reduce_ex__', <built-in method __reduce_ex__ of Cat object at 0x10b213dd8>)
# ('__repr__', <method-wrapper '__repr__' of Cat object at 0x10b213dd8>)
# ('__setattr__', <method-wrapper '__setattr__' of Cat object at 0x10b213dd8>)
# ('__sizeof__', <built-in method __sizeof__ of Cat object at 0x10b213dd8>)
# ('__str__', <method-wrapper '__str__' of Cat object at 0x10b213dd8>)
# ('__subclasshook__', <built-in method __subclasshook__ of type object at 0x7fc8afc24358>)
# ('__weakref__', None)
# ('fun1', <bound method Cat.fun1 of <__main__.Cat object at 0x10b213dd8>>)
# ('name', 'frank')
# ('sayHi', <bound method Cat.sayHi of <__main__.Cat object at 0x10b213dd8>>)

總結(jié)

當(dāng)然inspect 有很多方法, 比如 獲取源碼這個,這個就我沒有太用過

經(jīng)常用的可能就是我例子給出的,判斷類型,以及拿到函數(shù)的參數(shù),用inspect模塊非常方便,甚至 可以通過這個模塊,拿到函數(shù)的參數(shù),寫一個裝飾器,對函數(shù)參數(shù)進(jìn)行檢查

到此這篇關(guān)于python標(biāo)準(zhǔn)庫中inspect模塊的簡單說明的文章就介紹到這了,更多相關(guān)python的inspect模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 舉例詳解Python中threading模塊的幾個常用方法

    舉例詳解Python中threading模塊的幾個常用方法

    這篇文章主要介紹了舉例詳解Python中threading模塊的幾個常用方法,threading模塊用來創(chuàng)建和操作線程,是Python學(xué)習(xí)當(dāng)中的重要知識,需要的朋友可以參考下
    2015-06-06
  • 使用Pycharm創(chuàng)建一個Django項(xiàng)目的超詳細(xì)圖文教程

    使用Pycharm創(chuàng)建一個Django項(xiàng)目的超詳細(xì)圖文教程

    Django是比較經(jīng)典的Python web框架,最近剛好在項(xiàng)目中用到了Django,所以下面這篇文章主要給大家介紹了關(guān)于使用Pycharm創(chuàng)建一個Django項(xiàng)目的超詳細(xì)圖文教程,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • python做http代理請求的項(xiàng)目實(shí)踐

    python做http代理請求的項(xiàng)目實(shí)踐

    本文主要介紹了使用Python Flask實(shí)現(xiàn)HTTP代理服務(wù)器的解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • 從os.path到pathlib解析Python路徑處理的高級應(yīng)用

    從os.path到pathlib解析Python路徑處理的高級應(yīng)用

    在軟件開發(fā)和系統(tǒng)管理領(lǐng)域,文件路徑處理是一項(xiàng)基礎(chǔ)卻至關(guān)重要的任務(wù),本文將深入探討Python中路徑處理的各個方面,從基礎(chǔ)操作到高級技巧,大家可以根據(jù)需要進(jìn)行選擇
    2025-09-09
  • Python基于gevent實(shí)現(xiàn)文件字符串查找器

    Python基于gevent實(shí)現(xiàn)文件字符串查找器

    這篇文章主要介紹了Python基于gevent實(shí)現(xiàn)文件字符串查找器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • Python創(chuàng)建字典的八種方式

    Python創(chuàng)建字典的八種方式

    今天小編就為大家分享一篇關(guān)于Python創(chuàng)建字典的八種方式,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • python GUI庫圖形界面開發(fā)之PyQt5信號與槽機(jī)制、自定義信號基礎(chǔ)介紹

    python GUI庫圖形界面開發(fā)之PyQt5信號與槽機(jī)制、自定義信號基礎(chǔ)介紹

    這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5信號與槽機(jī)制基礎(chǔ)介紹,需要的朋友可以參考下
    2020-02-02
  • Python?sns.distplot()方法的使用方法

    Python?sns.distplot()方法的使用方法

    機(jī)器學(xué)習(xí)中經(jīng)常會用到圖形進(jìn)行可視化,如在網(wǎng)格搜索(GridSearch)后對特征的重要性進(jìn)行排序時,用到sns.barplot()函數(shù)按照重要程度輸出特征,這篇文章主要給大家介紹了關(guān)于Python?sns.distplot()方法的使用方法,需要的朋友可以參考下
    2022-03-03
  • Python中有哪些關(guān)鍵字及關(guān)鍵字的用法

    Python中有哪些關(guān)鍵字及關(guān)鍵字的用法

    這篇文章主要介紹了Python中有哪些關(guān)鍵字及關(guān)鍵字的用法,分享python中常用的關(guān)鍵字,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • Python批量修改文件名操作指南(文件名的替換、前綴、后綴的添加)

    Python批量修改文件名操作指南(文件名的替換、前綴、后綴的添加)

    很多時候我們手上有一堆文件,需要修改名稱時需要一個一個修改,太麻煩了,這篇文章主要給大家介紹了關(guān)于Python批量修改文件名的相關(guān)資料,包括文件名的替換、前綴、后綴的添加的相關(guān)資料,需要的朋友可以參考下
    2024-04-04

最新評論

尤溪县| 竹山县| 天柱县| 耒阳市| 博野县| 大竹县| 邢台县| 新安县| 荣昌县| 卓尼县| 肃北| 阳江市| 万宁市| 嘉黎县| 凤凰县| 麻城市| 阿瓦提县| 玉环县| 滨州市| 五台县| 西充县| 灌云县| 红原县| 哈尔滨市| 济南市| 庆元县| 磴口县| 广安市| 巴青县| 上思县| 独山县| 孝义市| 兴海县| 信宜市| 宁波市| 南昌县| 时尚| 蓬安县| 东阳市| 清徐县| 基隆市|