Python標準庫---六、內置函數(P-K-R-S-T-U)

上一篇文章: Python標準庫---五、內置函數(P-K-R)
下一篇文章: Python標準庫---七、內置函數(V-W-X-Y-Z)

內置函數:

clipboard.png

57. class set([iterable])

返回一個新的 set 對象,能夠選擇帶有從 iterable 獲取的元素。 set 是一個內置類型。 請查看 set 和 集合類型 --- set, frozenset 獲取關於這個類的文檔。

有關其餘容器請參看內置的 frozenset, list, tuple 和 dict 類,以及 collections 模塊。編程

58. setattr(object, name, value)

此函數與 getattr() 兩相對應。 其參數爲一個對象、一個字符串和一個任意值。 字符串指定一個現有屬性或者新增屬性。 函數會將值賦給該屬性,只要對象容許這種操做。 例如,setattr(x, 'foobar', 123) 等價於 x.foobar = 123。

59. class slice(stop)

class slice(start, stop[, step])segmentfault

返回一個表示由 range(start, stop, step) 所指定索引集的 slice 對象。 其中 start 和 step 參數默認爲 None。 切片對象具備僅會返回對應參數值(或其默認值)的只讀數據屬性 start, stop 和 step。 它們沒有其餘的顯式功能;不過它們會被 NumPy 以及其餘第三方擴展所使用。 切片對象也會在使用擴展索引語法時被生成。 例如: a[start:stop:step] 或 a[start:stop, i]。 請參閱 itertools.islice() 瞭解返回迭代器的一種替代版本。

60. sorted(iterable, *, key=None, reverse=False)

根據 iterable 中的項返回一個新的已排序列表。

具備兩個可選參數,它們都必須指定爲關鍵字參數。編程語言

key 指定帶有單個參數的函數,用於從 iterable 的每一個元素中提取用於比較的鍵 (例如 key=str.lower)。 默認值爲 None (直接比較元素)。函數

reverse 爲一個布爾值。 若是設爲 True,則每一個列表元素將按反向順序比較進行排序。ui

使用 functools.cmp_to_key() 可將老式的 cmp 函數轉換爲 key 函數。spa

內置的 sorted() 確保是穩定的。 若是一個排序確保不會改變比較結果相等的元素的相對順序就稱其爲穩定的 --- 這有利於進行多重排序(例如先按部門、再按薪級排序)。設計

有關排序示例和簡要排序教程,請參閱 排序指南 。代理

61. @staticmethod

將方法轉換爲靜態方法。

靜態方法不會接收隱式的第一個參數。要聲明一個靜態方法,請使用此語法code

class C:
    @staticmethod
    def f(arg1, arg2, ...): ...
@staticmethod 這樣的形式稱爲函數的 decorator -- 詳情參閱 函數定義。
靜態方法的調用能夠在類上進行 (例如 C.f()) 也能夠在實例上進行 (例如 C().f())。

Python中的靜態方法與Java或C ++中的靜態方法相似。另請參閱 classmethod() ,用於建立備用類構造函數的變體。對象

像全部裝飾器同樣,也能夠像常規函數同樣調用 staticmethod ,並對其結果執行某些操做。好比某些狀況下須要從類主體引用函數而且您但願避免自動轉換爲實例方法。對於這些狀況,請使用此語法:

class C:
    builtin_open = staticmethod(open)
想了解更多有關靜態方法的信息,請參閱 標準類型層級結構 。

62. class str(object='')

class str(object=b'', encoding='utf-8', errors='strict')

返回一個 str 版本的 object 。有關詳細信息,請參閱 str() 。

str 是內置字符串 class 。更多關於字符串的信息查看 文本序列類型 --- str。

63. sum(iterable[, start])

從 start 開始自左向右對 iterable 中的項求和並返回總計值。 start 默認爲 0。 iterable 的項一般爲數字,開始值則不容許爲字符串。

對某些用例來講,存在 sum() 的更好替代。 拼接字符串序列的更好更快方式是調用 ''.join(sequence)。 要以擴展精度對浮點值求和,請參閱 math.fsum()。 要拼接一系列可迭代對象,請考慮使用 itertools.chain()。

64. super([type[, object-or-type]])

返回一個代理對象,它會將方法調用委託給 type 指定的父類或兄弟類。 這對於訪問已在類中被重載的繼承方法頗有用。 搜索順序與 getattr() 所使用的相同,只是 type 指定的類型自己會被跳過。

type 的 mro 屬性列出了 getattr() 和 super() 所使用的方法解析順序。 該屬性是動態的,能夠在繼承層級結構更新的時候任意改變。

若是省略第二個參數,則返回的超類對象是未綁定的。 若是第二個參數爲一個對象,則 isinstance(obj, type) 必須爲真值。 若是第二個參數爲一個類型,則 issubclass(type2, type) 必須爲真值(這適用於類方法)。

super 有兩個典型用例。

  • 在具備單繼承的類層級結構中,super 可用來引用父類而沒必要顯式地指定它們的名稱,從而令代碼更易維護。 這種用法與其餘編程語言中 super 的用法很是類似。
  • 第二個用例是在動態執行環境中支持協做多重繼承。 此用例爲 Python 所獨有,在靜態編譯語言或僅支持單繼承的語言中是不存在的。 這使得實現「菱形圖」成爲可能,在這時會有多個基類實現相同的方法。 好的設計強制要求這種方法在每一個狀況下具備相同的調用簽名(由於調用順序是在運行時肯定的,也由於該順序要適應類層級結構的更改,還由於該順序可能包含在運行時以前未知的兄弟類)。
對於以上兩個用例,典型的超類調用看起來是這樣的:
class C(B):
    def method(self, arg):
        super().method(arg)    
        # This does the same thing as:
        # super(C, self).method(arg)
請注意 super() 是做爲顯式加點屬性查找的綁定過程的一部分來實現的,例如 super().__getitem__(name)。 它作到這一點是經過實現本身的 __getattribute__() 方法,這樣就能以可預測的順序搜索類,而且支持協做多重繼承。 對應地,super() 在像 super()[name] 這樣使用語句或操做符進行隱式查找時則未被定義。

還要注意的是,除了零個參數的形式之外,super() 並不限於在方法內部傅和。 兩個參數的形式明確指定參數並進行相應的引用。 零個參數的形式僅適用於類定義內部,由於編譯器須要填入必要的細節以正確地檢索到被定義的類,還須要爲普通訪問當前實例。

對於有關如何使用 super() 來如何設計協做類的實用建議,請參閱 使用 super() 的指南。

65. tuple([iterable])

雖然被稱爲函數,但 tuple 其實是一個不可變的序列類型,參見在 元組 與 序列類型 --- list, tuple, range 中的文檔說明。

66. class type(object)

class type(name, bases, dict)

傳入一個參數時,返回 object 的類型。 返回值是一個 type 對象,一般與 object.__class__ 所返回的對象相同。

推薦使用 isinstance() 內置函數來檢測對象的類型,由於它會考慮子類的狀況。

傳入三個參數時,返回一個新的 type 對象。 這在本質上是 class 語句的一種動態形式。 name 字符串即類名而且會成爲 name 屬性;bases 元組列出基類而且會成爲 bases 屬性;而 dict 字典爲包含類主體定義的命名空間而且會被複制到一個標準字典成爲 dict 屬性。 例如,下面兩條語句會建立相同的 type 對象:

>>> class X:
...     a = 1
...
>>> X = type('X', (object,), dict(a=1))
另請參閱 類型對象。

在 3.6 版更改: type 的子類若是未重載 type.__new__,將再也不能使用一個參數的形式來獲取對象的類型。

上一篇文章: Python標準庫---五、內置函數(P-K-R)
下一篇文章: Python標準庫---七、內置函數(V-W-X-Y-Z)
相關文章
相關標籤/搜索