我需要確保所有命名參數傳遞給一個方法(我不想任何默認值)。以下是執行它的最佳方式嗎?python:驗證函數參數
class X:
def func(self, **kwargs):
if set(kwargs.keys() != ('arg1', 'arg2', 'arg3'):
raise ArgException(kwargs)
我需要確保所有命名參數傳遞給一個方法(我不想任何默認值)。以下是執行它的最佳方式嗎?python:驗證函數參數
class X:
def func(self, **kwargs):
if set(kwargs.keys() != ('arg1', 'arg2', 'arg3'):
raise ArgException(kwargs)
對於Python 2.x中,休的答案(即只使用命名位置參數)是你最好的選擇。
對於Python 3.x的,你也有選項需要使用的關鍵字參數(而不是僅僅允許它)如下:
class X(object):
def func(self, *, arg1, arg2, arg3):
pass
class X(object):
def func(self, **kwargs):
required = set(['arg1','arg2','arg3'])
if not set(kwargs.keys()).issuperset(required):
raise ArgException(kwargs)
雖然你可以只讓翻譯照顧它:
class X(object):
def func(self, arg1, arg2, arg3):
pass
你要允許其他參數?如果不是:
class X(object):
def func(self, arg1, arg2, arg3):
pass
如果是:
class X(object):
def func(self, arg1, arg2, arg3, **kwargs):
pass
這是爲Python的所有版本。
確保您引發的異常是TypeError的子類。如果你想這樣做,你爲什麼要使用kwargs?只需正常指定變量。 – 2011-02-02 04:15:19
糟糕,糟糕的設計。使用`def func(self,arg1,arg2,arg3)`。 – 2011-02-02 11:07:50
@S洛特我會使用你的建議,但是我會一直以參數的順序犯錯誤。 @Glenn Maynard我使用命名參數只是爲了避免錯誤(我的許多函數有3-6個參數)。不好? – max 2011-02-02 18:57:06