2010-08-09 2 views
5

만약 args이 문자열이라면 args이 정수이고 ather 일이라면 하나만 할 필요가 있습니다.변수 유형을 확인하는 방법은 무엇입니까? Python

어떻게 형을 구울 수 있습니까? 예 : 우리가 변수 인수의 타입이 정수 리터럴 0 같은 경우 비교하는 위에는 경우,

if type(args) is type(0): 
    blabla 

:

def handle(self, *args, **options): 

     if not args: 
      do_something() 
     elif args is integer: 
      do_some_ather_thing: 
     elif args is string: 
      do_totally_different_thing() 

답변

13

처음으로, *args은 항상 목록입니다. 그 내용이 문자열인지 확인하고 싶습니까? -이 방법 모두 작업 유니 코드 및 bytestrings : 파이썬은 실제로 문자열의 두 종류가 있기 때문에

import types 
def handle(self, *args, **options): 
    if not args: 
     do_something() 
    # check if everything in args is a Int 
    elif all(isinstance(s, types.IntType) for s in args): 
     do_some_ather_thing() 
    # as before with strings 
    elif all(isinstance(s, types.StringTypes) for s in args): 
     do_totally_different_thing() 

types.StringTypes를 사용합니다.

Python3에서 내장형은 types lib에서 제거되었으며 단 하나의 문자열 유형이 있습니다. 이것은 형식 검사가 isinstance(s, int)isinstance(s, str) 인 것을 의미합니다.

+0

당신의 권리입니다. 그것은 목록입니다. – Pol

+0

'isinstance (s, types.IntType)'만을'isinstance (s, int)'보다 더 선호합니까? 아니면 두 종류의 문자열에 대해 언급 한 것과 일치합니까? 그냥 궁금해서. –

+1

귀하의 솔루션은 python 3.1과 호환되지 않습니다! – banx

0
type(variable_name) 

이 그럼 당신은 사용할 필요가 예를 들어 유형이 긴지 알고 싶다면 type(0l) 등과 비교하십시오.

+0

나는 이해하지 못한다. 사용 방법은? – Pol

+4

어. 'type (2)'는'int'이지만 어쨌든'type'은 좋지 않은 파이썬 – katrielalex

0

정수/문자열 인수가 필요한 것으로 알고있는 경우이를 *args으로 삼켜서는 안됩니다. 당신은 또한 (가 상속을 지원하기 때문에 선호) type 또는 isinstance을 사용하지 않고보다 파이썬 방법으로 그것을 할

def handle(self, first_arg = None, *args, **kwargs): 
    if isinstance(first_arg, int): 
     thing_one() 
    elif isinstance(first_arg, str): 
     thing_two() 
1

시도 할 수 마십시오 : 그것은 분명히 do_some_other_thing()가하는 일에 따라 달라집니다

if not args: 
    do_something() 
else: 
    try: 
     do_some_other_thing() 
    except TypeError: 
     do_totally_different_thing() 

합니다.

0
아무도 그것을 언급하지 않았다

하지만, 쉽게 용서 원칙을 요청하는 당신이 그 정수와 함께 일을하고있을거야 가정하기 때문에 아마 적용 : 물론

def handle(self, *args, **kwargs): 
    try: 
     #Do some integer thing 
    except TypeError: 
     #Do some string thing 

그 정수 것은 값을 변경하는 경우 너의 목록에, 아마도 너 먼저 확인해야 해. 물론 당신이 args을 통해 루프에 원하는 문자열을 정수에 대한 뭔가 다른 것을 할 경우 :

def handle(self, *args, **kwargs): 
    for arg in args: 
     try: 
      #Do some integer thing 
     except TypeError: 
      #Do some string thing 

것은 물론이 또한 시도에 다른 작업이 형식 오류가 발생하지 않습니다 가정됩니다.

+0

실제로 제가 언급했습니다 :) – systempuntoout

관련 문제