日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
四個讓Python代碼更容易閱讀的函數

當程序代碼行變多時,閱讀代碼變得困難。即使是一些簡單的任務也會很困難。例如:

  • 如何快速查看當前腳本的所有變量名和值?
  • 如何檢查大型函數或類的所有變量名稱和值?
  • 如何獲取特定對象的有效屬性列表?

當然,我們可以逐行查找代碼并記住名稱或將它們寫在草稿紙中。但是,這根本不是高效的,也不輕松。

閱讀代碼比編寫代碼更難?!?喬爾·斯波爾斯基

為了讓我們的生活更輕松,Python 提供了四個有用的內置函數來幫助我們方便地顯示特定變量名稱和值 。

函數 1: globals()

顧名思義,該 globals()函數將顯示全局變量信息 。

例如,如果我們打開 Python 控制臺并輸入 globals(), 將返回如下結果:

 
 
 
 
  1. Python 3.8.5 (v3.8.5:580fbb018f, Jul 20 2020, 12:11:27) 
  2. [Clang 6.0 (clang-600.0.57)] on darwin 
  3. Type "help", "copyright", "credits" or "license" for more information. 
  4. >>> globals() 
  5. {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': 
  6. >>> 

如果我們添加一個變量:

 
 
 
 
  1. >>> name = 'Python七號' 
  2. >>> globals() 
  3. {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , 'name': 'Python七號'} 
  4. >>> 

由于該 globals()函數只返回一個包含全局變量的字典。我們可以操縱這個 dict 來獲取一些我們感興趣的數據:

 
 
 
 
  1. >>> [n for n in globals() if not n.startswith('__')] 
  2. ['name'] 
  3. >>> 

如上例所示,我們使用列表推導式來獲取所有非雙下劃線的變量名稱。

函數 2:locals()

了解 globals()之后, locals()函數就是小菜一碟。顧名思義,它將返回一個包含所有本地變量和值的字典。

順便說一下,如果我們locals()在全局范圍內調用 ,結果與 globals()相同。

 
 
 
 
  1. >>> globals()  == locals() 
  2. True 
  3. >>> 

函數 3:vars()

該 vars()函數將返回 __dict__,這是一個用于存儲對象屬性的字典。其結果與直接調用對象的__dict__方法產生的結果相同 。

 
 
 
 
  1. >>> vars() 
  2. {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , 'name': 'Python七號'} 
  3. >>> class A: 
  4. ...     name = 'Python七號' 
  5. ... 
  6. >>> 
  7. >>> vars(A) 
  8. mappingproxy({'__module__': '__main__', 'name': 'Python七號', '__dict__': , '__weakref__': , '__doc__': None}) 
  9. >>> 
  10. >>> 

不是所有對象都有 __dict__方法,因此vars()只能在部分對象中使用。

 
 
 
 
  1. >>> num = 1 
  2. >>> vars(num) 
  3. Traceback (most recent call last): 
  4.   File "", line 1, in  
  5. TypeError: vars() argument must have __dict__ attribute 
  6. >>> 

如上例所示, int類型對象不包含 __dict__,因此如果我們vars()將引發(fā)TypeError 。

函數 4:dir()

該 dir()函數幫助顯示模塊或對象內的名稱列表。

 
 
 
 
  1. >>> dir(A) 
  2. ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name'] 
  3. >>> dir(num) 
  4. ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes'] 
  5. >>> dir() 
  6. ['A', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'name', 'num'] 
  7. >>> 

實際上,該dir方法在 __dir__()內部調用 。

如上所示,如果我們改變 __dir__工作方式,結果 dir()也會改變。

其他自省函數

自省就是自我反省,在編程方面是指程序在運行時自我判斷對象類型的能力,也可以說是反射,檢查某些事物以確定它是什么、它知道什么以及它能做什么,Django 框架之所以如此靈活,很多 ORM 類都用到了 Python 的自省函數。

與自省相關的主要方法:

  • hasattr(object, name)檢查對象是否具體 name 屬性。返回 bool.
  • getattr(object, name, default)獲取對象的name屬性。
  • setattr(object, name, default)給對象設置name屬性
  • delattr(object, name)給對象刪除name屬性
  • isinstance(name, object)檢查name是不是object對象
  • type(object)查看對象的類型
  • callable(object)判斷對象是否是可調用對象

最后 

這四個內置函數是我們顯示名稱和值的有用工具。它們的常見使用場景是在 Python 控制臺中使用,以在我們閱讀程序時探索腳本或對象。Pytho 的內省函數也可以在運行時動態(tài)檢查對象的類型和方法,可以幫助我們檢查代碼,也方便我們編寫出靈活可擴展的程序。

本文轉載自微信公眾號「Python七號」,可以通過以下二維碼關注。轉載本文請聯(lián)系Python七號公眾號。


名稱欄目:四個讓Python代碼更容易閱讀的函數
URL地址:http://www.5511xx.com/article/dhchjjj.html