成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

四個讓 Python 代碼更容易閱讀的函數(shù)

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

[[426003]]

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

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

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

閱讀代碼比編寫代碼更難。— 喬爾·斯波爾斯基

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

函數(shù) 1: globals()

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

例如,如果我們打開 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__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>} 
  6. >>> 

如果我們添加一個變量:

  1. >>> name = 'Python七號' 
  2. >>> globals() 
  3. {'__name__''__main__''__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'name''Python七號'
  4. >>> 

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

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

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

函數(shù) 2:locals()

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

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

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

函數(shù) 3:vars()

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

  1. >>> vars() 
  2. {'__name__''__main__''__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'name''Python七號'
  3. >>> class A: 
  4. ...     name = 'Python七號' 
  5. ... 
  6. >>> 
  7. >>> vars(A) 
  8. mappingproxy({'__module__''__main__''name''Python七號''__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None}) 
  9. >>> 
  10. >>> 

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

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

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

函數(shù) 4:dir()

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

  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()也會改變。

其他自省函數(shù)

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

與自省相關的主要方法:

  • 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)判斷對象是否是可調用對象

最后 

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

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

 

責任編輯:武曉燕 來源: Python七號
相關推薦

2021-10-24 08:45:09

數(shù)據(jù)安全云計算網(wǎng)絡安全

2015-08-17 16:34:13

2020-08-25 08:47:15

開源軟件技巧

2015-07-23 10:25:27

android代碼質量

2009-03-13 09:39:34

JavaScript函數(shù)調用規(guī)則

2023-12-13 13:00:57

2023-09-13 16:34:47

Java工具開發(fā)

2023-09-26 12:34:29

Python迭代過濾函數(shù)

2019-06-26 15:41:26

AI云原生云遷移

2022-08-02 10:33:11

JavaScript代碼

2023-11-23 13:50:00

Python代碼

2022-05-04 12:44:57

Python編程語言

2020-10-29 08:35:06

Pandas函數(shù)Python

2022-06-20 10:37:31

物聯(lián)網(wǎng)智能安防智能建筑

2015-01-23 10:17:23

DCIM數(shù)據(jù)中心運營與管理

2009-05-22 10:28:07

2011-06-14 18:13:05

網(wǎng)站分析

2022-02-23 15:09:18

數(shù)字化轉型國有企業(yè)數(shù)據(jù)

2021-01-14 10:48:05

技術RPCRS

2013-03-18 13:31:28

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产福利在线视频 | 日本午夜精品一区二区三区 | 国产精品毛片一区二区三区 | 九九热精品视频 | 国产精品综合网 | 精品久久久久久久久久久久 | 一区二区日韩 | 狠狠色综合久久婷婷 | 97国产精品| 一区二区三区在线看 | 亚洲精品成人免费 | 欧美高清视频在线观看 | 久久久久国产一区二区三区不卡 | 久在草 | 91在线电影 | 国产精品一区二区三区四区五区 | 久久这里只有精品首页 | 九九九国产| 国产精品爱久久久久久久 | 久久精品国产99国产精品 | 欧美大片一区 | 国产精品美女久久久久aⅴ国产馆 | 亚洲www. | 久久精彩视频 | 中文字幕日韩欧美 | 免费av电影网站 | 国产精品3区| 在线观看www | 久草热播| 久久99精品视频 | 欧美日韩综合一区 | 国产激情视频在线 | 黄色片免费在线观看 | 一区二区成人 | wwwxxx日本在线观看 | 精品国产一区二区在线 | 亚洲一区二区三区在线视频 | 成人深夜福利 | 欧美日韩综合视频 | 国产真实乱全部视频 | 黄色毛片在线观看 |