문제

나는 파이썬 기능에는 내가 하는 일부 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!
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top