import itertools class ArgumentsChecker: def __init__( self, mandatoryParameters, optionalParameters ): self.__mandatoryParameters = mandatoryParameters self.__optionalParameters = optionalParameters def check( self, args, kwds ): data = dict( kwds ) if len( args ) + len( kwds ) == 0: raise TypeError() for arg, argumentName in itertools.izip( args, itertools.chain( self.__mandatoryParameters, self.__optionalParameters ) ): if argumentName in kwds: raise TypeError() else: data[ argumentName ] = arg for argumentName in data: if argumentName not in itertools.chain( self.__mandatoryParameters, self.__optionalParameters ): raise TypeError() for argumentName in self.__mandatoryParameters: if argumentName not in data: raise TypeError() return data