루프 기능에 대한 매개 변수태 검사
-
03-07-2019 - |
문제
나는 파이썬 기능에는 내가 하는 일부 sanitisation 의 입력 매개변수:
def func(param1, param2, param3):
param1 = param1 or ''
param2 = param2 or ''
param3 = param3 or ''
이를 충족시켜 인수로 전달하는 없음 보다는 빈 문자열입니다.가 쉽게/더 간단한 방법으로 반복 함수를 적용하는 등의 표현이 있습니다.나의 실제 기능은 나인 매개 변수입니다.
해결책
이처럼 보이는 좋은 일을 위해 디자이너이다.는 방법에 대해 이:
def sanitized(func):
def sfunc(*args, **kwds):
return func(*[arg or '' for arg in args],
**dict((k, v or '') for k,v in kwds.iteritems()))
sfunc.func_name = func.func_name
sfunc.func_doc = func.func_doc
return sfunc
당신이 사용하는 것이 이 함수는 다음과 같이
@sanitized
def func(param1, param2, param3):
print param1, param2, param3
다음 매개변수에 의해 대체될 경우 빈 문자열을 그들은 거짓:
>>> func('foo', None, 'spam')
foo spam
(참고로 이것은 여전히 엉망 기능은 서명으로 Ned Batchelder 점에서 그의 대답이다.수정하는 데 사용할 수 있는 미셸 Simionato 의 장식 모듈--난 당신을 추가하여 @decorator
하기 전에 정의 sanitized
)
다른 팁
목록 조작을 수행 할 수 있습니다.
def func(param1, param2, param3):
param1, param2, param3 = map(lambda x: x or '', (param1, param2, param3))
그러나 9 줄을 작성하는 것보다 더 낫지는 않습니다. 일단 9 개의 매개 변수에 도달하면, 그것은 엄청나게 긴 줄입니다.
기능 선언을 변경할 수 있습니다.
def func(*args):
param1, param2, param3 = map(lambda x: x or '', args)
그러나 실제 매개 변수 이름과 기본값을 변경할 수있는 가능성으로부터 발생하는 문서를 잃어 버리면 여전히 포장을 풀기 위해 꽤 끔찍한 줄이 있습니다.
나는 9 줄을 작성하거나 매개 변수가 적음으로 기능을 변경한다고 말합니다. Nine은 어쨌든 많은 것입니다!
def func(x='', y='', z='hooray!'):
print x, y, z
In [2]: f('test')
test hooray!
In [3]: f('test', 'and')
test and hooray!
In [4]: f('test', 'and', 'done!')
test and done!
제휴하지 않습니다 StackOverflow