假設這是一個標準的get
調用(就像在字典上),這應該很容易。用None
定義你的函數默認爲你的參數,然後通過color
和size
而不必麻煩檢查它們!
def apicall(color=None, size=None):
pass # Do stuff
color = request.GET.get('color')
size = request.GET.get('size')
apicall(color, size)
這樣,你只檢查None
參數在一個地方(函數調用,你無論如何都要檢查函數可以調用多種方式內)。一切都很好,很乾淨。當然,這假定(就像我在頂部所說的那樣),你的get
調用就像是一個普通的Python字典的get
方法,如果找不到該值,返回None
。
最後,我注意到你的函數名是apicall
:有可能你實際上並沒有訪問函數代碼本身。在這種情況下,由於您可能不知道函數簽名的默認值,並且None
可能是錯誤的,所以我可能只會寫一個簡單的包裝來爲您進行參數檢查。然後你可以像上面那樣調用包裝器!
def wrapped_apicall(color=None, size=None):
if color is None and size is None:
return apicall()
# At least one argument is not None, so...
if size is None:
# color is not None
return apicall(color)
if color is None:
# size is not None
return apicall(size)
# Neither argument is None
return apicall(color, size)
注:這第二個版本除非你不能看到你打電話,並沒有關於它的任何文件的代碼應該沒有必要!使用None
作爲默認參數非常常見,因此您可以使用第一種方式。如果你不能修改你調用的函數,並且你不知道它的默認參數是什麼(或者它的默認參數是模塊常量或者某些東西,但這很少),我只會使用包裝器方法。
是的,但如果我的一個變量沒有被定義那麼'apicall(顏色,大小)'會拋出一個錯誤,不是嗎? – user1328021
好的,謝謝......你寫的是我如何設想完成的,但我一直認爲必須有更高效的方法...... – user1328021
@ user1328021假設這兩行都執行:'color = request.GET .get('color')'和 'size = request.GET.get('size')',那麼'color'和'size'都保證**定義**,儘管它們可能是None '。你認爲這樣做效率低下? –