2016-11-18 18 views
0

我正在寫一個函數,它需要2個常規參數(字符串)和1個函數。主要功能是使用2個字符串參數(例如保存到數據庫)。函數參數將允許添加額外的行爲。例如:Python自定義行爲通過傳遞函數

def call(arg1, arg2, func): 
    save(arg1, arg2) # main functionality here. 
    if callable(func): 
     func(arg1, arg2) 

def with_callback(): 
    def log(*args): 
     values = ', '.join(str(x) for x in args) 
     print('call used with arguments: {values}'.format(values=values) 

    call('example', 'case', log) 

的想法是一樣的有效的Python

Item 23:接受了簡單的接口而不是類的功能。

該實現因此將類似於list.sort(key=somefunc)或第一參數collections.defaultdict

所以現在的問題歸結爲:

如何實現讓自定義行爲可以定義一個函數(或類?)取一個函數作爲參數?

(或表述有所不同:什麼是使用功能參數時行爲進行自定義的首選方式?)

+0

你傳入一個函數對象?我不確定我會得到你的問題。 –

+0

@leaf有效的Python鏈接應該比我更好地解釋它,但是。該函數具有一些主要功能(arg1,arg2),它允許您通過發送另一個函數來自定義某些行爲。 – Randyr

+1

我不清楚什麼是關於示例代碼的不清楚。它應該工作得很好,我不知道你需要知道它不包括。 –

回答

0

做到這一點的最佳方式是的None默認參數:

def call(arg1, arg2, func=None): 
    save(arg1, arg2) 
    if func is not None: 
    func(arg1, arg2) 
相關問題