2015-02-02 4 views
-2

이것이 작동하는 방법에 대해 약간의 암묵적인 설명이 있지만 정확한 구문을 모릅니다.파이썬에서 데이터 유형을 정의하십시오.

예 :

def function(string): 
    string = string + "A" 

어떻게 함수가 내가 무엇을 입력하고하는 문자열입니다 것을 알 수 있습니까? 파이썬은 동적하지만 정적이지, 당신은 할 수 없습니다 ...

string = type.str 
+4

그렇지 않습니다. 'string + "A"연산은 가능한 경우 성공하고, 그렇지 않으면 성공하지 않습니다. ('string'은 성공하기위한 문자열 일 필요는 없습니다.) 당신이 여기서 무엇을 묻고 있는지 명확하지 않습니다. 왜 함수가 문자열에서 전달하는 것을 "알"려니? – BrenBarn

답변

0

변수의 유형을 확인하는 몇 가지 방법이 있습니다.

def isstring(parameter): 
    return isinstance(parameter, str) 

는 또 다른 방법은 매개 변수 결국 캐치 예외 (TypeError 제외)와 (이 경우 ""에) 문자열을 연결하는 시도 할 수 : 매개 변수가 str의 인스턴스 인 경우 첫째, 당신은 확인할 수 있습니다

def isstring(parameter): 
    try: 
     parameter += "" 
     return True 
    except TypeError: 
     return False 

또 다른 방법은 type 사용할 수 (isinstance 비슷한,하지만 다형성 (polymorphism)이 참여하고있다 대부분의 차이) :

def isstr(parameter): 
    return type(parameter) == str 

assert도 사용할 수 있지만 매개 변수가 특정 유형인지 확인하려면 첫 번째 경우를 채택합니다.

+0

이와 같은 유형은 확인하지 않아야합니다. 믿기지 않을 정도로 희한합니다. * 반드시 *해야한다면'str'이 아닌'basestring'을 검사해야합니다 – sapi

+1

@ sapi unpythonic, 또는 내가 보여준 것을 정의하고 싶다면 OP의 질문에 답하십시오. 이러한 구조가 존재한다면 그것은 이유가 있습니다. – nbro

+0

@sapi이 경우'str'에 대한 검사는 완벽하게 괜찮습니까? 아니면 잘못 되었습니까? – nbro

0

없음의 라인을 따라 뭔가 그 것이다, 그래서 "컴파일 타임"에서 인수 유형을 알 수없는 대신, 당신은 확인할 수 있습니다 assert에 의한 입력 형

def fun(string): 
    assert isinstance(string, basestring) # we usually check if it type is basestring as this works fine for both ASCII string and Unicode. 
    string = string + "A" 
    return string 


if __name__ == '__main__': 
    fun(2) 
관련 문제