Python標準庫---七、內置函數(V-W-X-Y-Z)

上一篇文章: Python標準庫---六、內置函數(P-K-R-S-T-U)
下一篇文章: Python標準庫---八、內置常量

內置函數:

clipboard.png

67. vars([object])

返回模塊、類、實例或任何其它具備 dict 屬性的對象的 dict 屬性。

模塊和實例這樣的對象具備可更新的 dict 屬性;可是,其它對象的 dict 屬性可能會設爲限制寫入(例如,類會使用 types.MappingProxyType 來防止直接更新字典)。編程

不帶參數時,vars() 的行爲相似 locals()。 請注意,locals 字典僅對於讀取起做用,由於對 locals 字典的更新會被忽略。segmentfault

68. zip(*iterables)

建立一個聚合了來自每一個可迭代對象中的元素的迭代器。

返回一個元組的迭代器,其中的第 i 個元組包含來自每一個參數序列或可迭代對象的第 i 個元素。 當所輸入可迭代對象中最短的一個被耗盡時,迭代器將中止迭代。 當只有一個可迭代對象參數時,它將返回一個單元組的迭代器。 不帶參數時,它將返回一個空迭代器。 至關於:app

def zip(*iterables):
    # zip('ABCD', 'xy') --> Ax By
    rr = object()
    iterators = [iter(it) for it in iterables]
    while iterators:
        result = []
        for it in iterators:
            elem = next(it, sentinel)
            if elem is sentinel:
                return
            result.append(elem)
        yield tuple(result)
函數會保證可迭代對象按從左至右的順序被求值。 使得能夠經過 zip( [iter(s)]n) 這樣的慣用形式將一系列數據聚類爲長度爲 n 的分組。 這將重複 一樣的 迭代器 n 次,以便每一個輸出的元組具備第 n 次調用該迭代器的結果。 它的做用效果就是將輸入拆分爲長度爲 n 的數據塊。

當你不用關心較長可迭代對象末尾不匹配的值時,則 zip() 只須使用長度不相等的輸入便可。 若是那些值很重要,則應改用 itertools.zip_longest()。函數

zip() 與 * 運算符相結合能夠用來拆解一個列表:ui

>>>
>>> x = [1, 2, 3]
>>> y = [4, 5, 6]
>>> zipped = zip(x, y)
>>> list(zipped)
[(1, 4), (2, 5), (3, 6)]
>>> x2, y2 = zip(*zip(x, y))
>>> x == list(x2) and y == list(y2)
True

69. __import__(name, globals=None, locals=None, fromlist=(), level=0)

註解 與 importlib.import_module() 不一樣,這是一個平常 Python 編程中不須要用到的高級函數。
此函數會由 import 語句發起調用。 它能夠被替換 (經過導入 builtins 模塊並賦值給 builtins.__import__) 以便修改 import 語句的語義,可是 強烈 不建議這樣作,由於使用導入鉤子 (參見 PEP 302) 一般更容易實現一樣的目標,而且不會致使代碼問題,由於許多代碼都會假定所用的是默認實現。 一樣也不建議直接使用 __import__() 而應該用 importlib.import_module()。

該函數會導入 name 模塊,有可能使用給定的 globals 和 locals 來肯定如何在包的上下文中解讀名稱。 fromlist 給出了應該從由 name 指定的模塊導入對象或子模塊的名稱。 標準實現徹底不使用其 locals 參數,而僅使用 globals 參數來肯定 import 語句的包上下文。spa

level 指定是使用絕對仍是相對導入。 0 (默認值) 意味着僅執行絕對導入。 level 爲正數值表示相對於模塊調用 __import__() 的目錄,將要搜索的父目錄層數 (詳情參見 PEP 328)。code

當 name 變量的形式爲 package.module 時,一般將會返回最高層級的包(第一個點號以前的名稱),而 不是 以 name 命名的模塊。 可是,當給出了非空的 fromlist 參數時,則將返回以 name 命名的模塊。對象

例如,語句 import spam 的結果將爲與如下代碼做用相同的字節碼:ip

spam = __import__('spam', globals(), locals(), [], 0)
語句 import spam.ham 的結果將爲如下調用:
spam = __import__('spam.ham', globals(), locals(), [], 0)
請注意在這裏 __import__() 是如何返回頂層模塊的,由於這是經過 import 語句被綁定到特定名稱的對象。

另外一方面,語句 from spam.ham import eggs, sausage as saus 的結果將爲get

_temp = __import__('spam.ham', globals(), locals(), ['eggs', 'sausage'], 0)
eggs = _temp.eggs
saus = _temp.sausage
在這裏, spam.ham 模塊會由 __import__() 返回。 要導入的對象將今後對象中提取並賦值給它們對應的名稱。

若是您只想按名稱導入模塊(可能在包中),請使用 importlib.import_module()

在 3.3 版更改: Negative values for level are no longer supported (which also changes the default value to 0).

腳註
解析器只接受 Unix 風格的行結束符。若是您從文件中讀取代碼,請確保用換行符轉換模式轉換 Windows 或 Mac 風格的換行符。

上一篇文章: Python標準庫---六、內置函數(P-K-R-S-T-U)
下一篇文章: Python標準庫---八、內置常量
相關文章
相關標籤/搜索