를 호출하는 동안 다음 추가 인수를 추가 I라는 맵이 같은 함수에 문자열을 매핑이 : 나는 유형에 따라 해당 유효성 검사 함수를 호출 할 필요가그것으로 인수 함수 포인터를 보내고
validator = {'first_name' : validate_str,
'last_name' : validate_str,
'phone' : validate_phone }
내가지도에 넣은 값은 예를 들어 입력으로 나에게 먹일 것이다.
for name in elements:
# Validate the value of this name in the input map using the function
# input is the map that has the value for each of these fields
# elements is a list of all fields used to loop through one input at a time
if validator[name](input[name]) is False:
# Throw validation error
else:
# Do something else
가 할 수 있으면이 시나리오 나는 확실하지 않다 않으면이 잘 작동 :
주어진 문자열이 원하는 최대 길이의 경우 validate_str도 확인합니다.
def validate_str(str, max-len):
# Throw error if len(str) > max-len
최대-렌
는 문자열을 기반으로, 그래서 나는 64 자와 256 자와 성을 말할와 FIRST_NAME에 대한 validate_str 호출 할 필요가 다를 수 있습니다.다른 필드를 사용하여이 필드에 max_len이 있다고 말할 수는 있지만 validator_str 함수에 대한 포인터를 필드에 기반하여 미리 설정된 max-len 인수와 함께 사용할 수 있습니까?
뭔가 같은 :
validator = {'first_name' : validate_str(max-len=64),
'last_name' : validate_str(max-len=256),
'phone' : validate_phone }
다음
처럼 확인을 위해 전화 :
if validator[name](str=input[name]) is False:
# The appropriate value for max-len goes with the function call and just the
# str is appended to the argument list while invoking.
이것은 우리가 다음 필드는 최대-렌이 함께 전송해야합니다 것을 다시 기억하지 않아도 있도록 쉽게 생활을하게 그것으로.
오타가 발생할 수 있습니다 :'validate'는'validator'를 의미합니까? '요소 '란 무엇입니까? 'first_name','last_name' 또는 사전과 같은 문자열 목록 인 것 같습니다. – ninjagecko
실수를 수정했습니다. 지적 해 주셔서 감사합니다. –
문제 없습니다. 'element '를 사전'data = {'first_name ':'Bob ','last_name ':'Bobley ','phone ': 1234567890}'으로 만들고 data.items()의 필드, : validator가 아닌 경우 [field] (value) : ...'. 훨씬 더 깨끗하게 읽습니다. – ninjagecko