2012-03-27 5 views
0

일반적으로 파이썬에서는 타입 검사가 싫은 데다 좋은 이유가 있습니다. 코드가 잘 설계되어 있다면 어떤 종류의 데이터가 함수에 전달되는지 알아야합니다.파이썬에서 와일드 카드로 타입 확인

그러나 이전 프로그래밍 언어를 구현하는 중이고 일부는 입력 유효성 검사 및 호환성과 관련된 고유 한 문제가 있습니다.

def argcheck(stack, funcname, arglist, exceptlist): 
     """This function checks if arguments are valid and then passes back a list of them in order if they are. 
     stack should contain the stack. 
     funcname should contain the display name of the function for the exception. 
     arglist should contain a list of lists of valid types to be checked against. 
     exceptlist contains the information the exception should contain if the item does not match.""" 
     returnlist=[] 
     count=0 
     for xtype in arglist: 
      if stack[-1] in xtype: 
       returnlist.append(stack[-1]) 
       stack.pop() 
      else: 
       raise Exception(funcname, exceptlist[count]) 

때때로, 나는 어떤 유형과 일치하는 뭔가가 필요 :

함수가 실제로 실행되기 전에 몇 가지 기본적인 유형 검사를 수행하는 데 사용되는 기능입니다. 모든 유형의 목록을 만들거나 일치하는 항목이 있으면 true를 반환하는 목록에 항목을 배치하려면 어떻게해야합니까?

+1

"일반적으로 유형 검사는 파이썬으로 눈살을 찌푸리게하고 이익을 위해 reason-- 당신이해야 코드가 잘 설계된 경우 어떤 종류의 데이터가 함수에 전달되는지 알고 있어야합니다. " <- 그 이유가 전혀 아닙니다. 그 이유는 "모든 것이 대상"이기 때문에 일반적으로 함수는주의를 기울이지 않아야합니다. – SpliFF

+0

개체의 메서드가 다릅니다. 함수가 문자열 타입의 인자를 취하고 숫자를 추가 할 것으로 예상된다면, 이것은 잘되지 않을 것입니다. 내가 물어볼 질문은 왜 숫자가 처음부터 문자열을 얻는 기능을 추가하는 것인가? – Kelketek

답변

1

어떤 유형과 일치하고, xtype가 비어 True 경우로 일치하는 조건을 변경하는 빈 목록을 사용하여 :

def argcheck(stack, funcname, arglist, exceptlist): 
    returnlist=[] 
    count=0 
    for xtype in arglist: 
     if not xtype or stack[-1] in xtype: 
      returnlist.append(stack[-1]) 
      stack.pop() 
     else: 
      raise Exception(funcname, exceptlist[count]) 
관련 문제