常用的 Duck Typing 約定

2021-08-24 21:45:18 字數 2347 閱讀 9104

面的部分描述一些常見的python約定,在django中貫穿始終,在任何大一些的python庫都的確存在。

callable

python允許**可以有許多途徑被執行,任何東西都能像典型的函式標識可呼叫的一樣,按相同的方式執行。所有函式,類,方法都是自動可呼叫的,像期望的一樣,但是任意物件類例項也能被標識為可呼叫,只要提供乙個單一方法。

__calll__(self[, ...])

當例項化物件像函式一樣呼叫時,這個方法就開始執行。它和其他的成員函式很象,不同的地方就是被呼叫的方式。

>>> class multiplier(object):

...     def __init__(self, factor):

...         self.factor = factor

...     def __call__(self, value):

...         return value * self.factor

...

>>> times2 = multiplier(2)

>>> times2(5)

10>>> times2(10)

20>>> times3 = multiplier(3)

>>> times3(10)

30python也提供了乙個內建函式來判定可呼叫(callable)的物件。 callable()函式只有乙個引數,返回true或false。判斷物件是否像函式一樣可呼叫。

>>> class basic(object):

...     pass

...

>>> class callable(object):

...     def __call__(self):

...         return "executed!"

...

>>> b = basic()

>>> callable(b)

false

>>> c = callable()

>>> callable(c)

true

字典字 典是單一物件中的鍵值對映。大多數程式語言都有相同形式的字典型別,其他語言稱之為「hashes", "maps"或"associative arrays(關聯陣列)",除了簡單通過指定鍵來訪問值,python的字典提供了許多方法,一邊更好的操作底層的對映。為了像乙個真正的字典的表現行 為,乙個物件需要提供一些方法,文件參見python library reference。

__contains__(self, key)

通過使用in操作符, 如果指定的鍵存在於底層的對映中,則返回true,否則返回false。它從不返回異常。

__getitem__(self, key)

如果存在的華,則返回被指定鍵引用的值。如果鍵不在底層的對映中,則丟擲乙個異常keyerror。

__setitem__(self, key, value)

通過指定的鍵來儲存指定的值,儲存之後準備引用它。如果有乙個對映存在,可用相同的鍵覆蓋已經存在的值。

>>> class caseinsensitivedict(dict):

...     def __init__(self, **kwargs):

...         for key, value in kwargs.items():

...             self[key.lower()] = value

...     def __contains__(self, key):

...         return super(caseinsensitivedict, self).__contains__(key.lower())

...     def __getitem__(self, key):

...         return super(caseinsensitivedict, self).__getitem__(key.lower())

...     def __setitem__(self, key, value):

...         super(caseinsensitivedict, self).__setitem__(key.lower(), value)

...

>>> d = caseinsensitivedict(spam='eggs')

>>> 'spam' in d

true

>>> d['spam']

'eggs'

>>> d['spam'] = 'burger'

>>> d['spam']

'burger

字典也可以用作迭代使用,當**迴圈字典的內容時,鍵用作列表。更多資訊參見即將介紹的"iterables"(迭代)。

C 常用的呼叫約定 cdecl

函式呼叫約定 當乙個函式被呼叫時,函式的引數會被傳遞給被呼叫的函式和返回值會被返回給呼叫函式。函式的呼叫約定就是描述引數是怎麼傳遞和由誰平衡堆疊的,當然還有返回值。函式呼叫約定的主要約束事件 引數傳遞順序 1.從右到左依次入棧 stdcall,cdecl,thiscall 2.從左到右依次入棧 pa...

了解常用的C C 函式呼叫約定

呼叫約定 calling convention 決定以下內容 關於 c c 函式呼叫約定,大多數時候並不會影響程式邏輯,但遇到跨語言程式設計時,了解一下還是有好處的。vc 中預設呼叫是 cdecl 方式,windows api 使用 stdcall 呼叫方式,在 dll 匯出函式中,為了跟 wind...

蒲公英的約定

考試時以為是一道高次同餘方程題,然後只打了乙個暴力。最後db發現只需要通過輸入中的最後一行倒推回去就行了。首先根據題目我們知道,輸入中的最後一行中b等於0。那麼就是 c lastans 0。根據異或的性質我們知道c lastans。於是最後乙個答案一定是c。那麼就可以知道倒數第二行中的x c,即 i...