스택큐힙리스트
파이썬 변수의 유형을 확인하는 가장 좋은 (관용적인) 방법은 무엇인가요? [중복] 본문
이 질문은 이미 답변이 있습니다 :
What are the differences between type() and isinstance()?
1. Hello - 안녕하세요
2. Goodbye - 안녕히 가세요
3. Thank you - 감사합니다
4. Please - 부탁합니다
5. Yes - 예
6. No - 아니요
7. I love you - 사랑해요
8. Sorry - 죄송합니다
10년 전에 닫혔습니다.
파이썬에서 변수가 문자열인지 딕셔너리인지 알아내야 합니다. 다음 코드에 문제가 있는지 알려주세요.
if type(x) == type(str()):
do_something_with_a_string(x)
elif type(x) == type(dict()):
do_somethting_with_a_dict(x)
else:
raise ValueError
업데이트: 저는 avisser의 답변을 받아 들였습니다. (하지만 누군가가 왜 isinstance 보다 type(x) is이 좋은지 설명한다면 제 생각을 바꿀 수도 있습니다.)
그러나 nakedfanatic님이 일련의 if/elif/else문 대신 dict(사례문으로)를 사용하는 것이 종종 더 깨끗하다는 것을 상기시켜 주신 덕분에 감사합니다.
제 사용 사례에 대해 더 자세히 설명하겠습니다. 변수가 문자열이면 리스트에 넣어야합니다. 딕셔너리인 경우 고유한 값의 리스트가 필요합니다. 다음은 제가 생각한 것입니다.
def value_list(x):
cases = {str: lambda t: [t],
dict: lambda t: list(set(t.values()))}
try:
return cases[type(x)](x)
except KeyError:
return None
만약 #$ @ #! @ & @$ &가 선호되면 이 #$! ^ & * $! $ & 함수를 어떻게 작성하시겠습니까?
답변 1
당신의 함수에 누군가가 유니코드 문자열을 전달하거나 dict에서 파생된 클래스를 전달하거나 dict와 유사한 인터페이스를 구현하는 클래스를 전달하면 어떻게 될까요? 아래의 코드는 첫 번째와 두 번째 경우를 다룹니다. 만약 Python 2.6을 사용한다면 ABC PEP을 대신해서 collections.Mapping를 사용할 수도 있습니다.
def value_list(x):
if isinstance(x, dict):
return list(set(x.values()))
elif isinstance(x, basestring):
return [x]
else:
return None
답변 2
파이썬에서 변수의 유형을 확인하는 데 어떤 방법이 가장 좋을까요? 혹자는 isinstance() 함수를 사용하여 변수의 유형을 확인하는 것이 권장되고 있지만, 이 방법은 종종 다른 오류를 일으킬 수 있습니다. 때로는 좀 더 명확하고 신뢰성 높은 방법이 필요할 수 있습니다.그렇다면 어떤 방법이 가장 좋을까요? 파이썬에서 변수의 유형을 확인하는 가장 좋은 방법은 type() 함수를 사용하는 것입니다. 이 함수는 변수의 타입을 돌려주는 기능을 합니다. 다음은 type() 함수를 사용한 예제입니다.
```
x = 5
print(type(x)) #
y = Hello, World!
print(type(y)) #
```
위의 예제에서, type() 함수는 각 변수 x와 y의 유형을 알려주었습니다. 결과 값에서 class 뒤에 있는 문자열이 변수의 유형을 나타내는 것을 볼 수 있습니다. 이를 통해, 변수의 유형을 더욱 명확하게 알 수 있습니다.
따라서, 변수의 유형을 파이썬에서 확인하는 가장 좋은 방법은 type() 함수를 사용하는 것입니다. 이 함수를 사용하여, 변수의 유형을 정확하게 확인할 수 있습니다. 이를 통해, 프로그래머들은 보다 높은 신뢰성과 안정성을 가진 프로그램을 만들 수 있습니다.