在行:
formatter = FuncFormatter(millions)
正在創建的FuncFormatter
類,它正在與millions
函數初始化的一個實例。這是一個matplotlib接受的類,它是api的一部分來格式化tick。在該示例中,將formatter
對象傳遞給y軸的set_major_formatter
方法,以便使用millions
函數格式化滴答。
你可以看到這是如何工作在matplotlib源代碼。類的定義如下:
class FuncFormatter(Formatter):
"""
User defined function for formatting
The function should take in two inputs (tick value *x* and position *pos*)
and return a string
"""
def __init__(self, func):
self.func = func
def __call__(self, x, pos=None):
'Return the format for tick val *x* at position *pos*'
return self.func(x, pos)
所以,現在存儲在formatter
對象將具有屬性func
它指向millions
功能。當matplotlib讓到你通過它的formatter
對象的調用,它將傳遞參數(即由蜱表示的值),這是指向self.func
由於millions
功能只格式化爲millions
功能基於x值而不是在該位置上打勾,millions
的定義僅包含pos
參數作爲虛擬佔位符。它必須這樣做,以便在格式化ticks時由matplotlib調用self.func(x, pos)
時不會出現錯誤。
仿函數是概念 – JMJ