etc./StackOverFlow

Python 변수의 유형을 결정하는 방법은 무엇입니까?

청렴결백한 만능 재주꾼 2021. 12. 24. 06:18
반응형

질문자 :user46646


부호 없는 32비트, 부호 있는 16비트 등 변수의 유형을 보려면 어떻게 해야 합니까?

어떻게 보나요?



type() 내장 함수를 사용하십시오:

 >>> i = 123 >>> type(i) <type 'int'> >>> type(i) is int True >>> i = 123.456 >>> type(i) <type 'float'> >>> type(i) is float True

변수가 주어진 유형인지 확인하려면 isinstance 사용하십시오.

 >>> i = 123 >>> isinstance(i, int) True >>> isinstance(i, (float, str, set, dict)) False

Python에는 귀하의 질문으로 보이는 C/C++와 동일한 유형이 없습니다.


gregjor

type() 내장 함수를 찾고 있을 수 있습니다.

아래 예제를 참조하십시오. 그러나 Python에는 Java와 같은 "서명되지 않은" 유형이 없습니다.

양의 정수:

 >>> v = 10 >>> type(v) <type 'int'>

양의 정수:

 >>> v = 100000000000000 >>> type(v) <type 'long'>

음의 정수:

 >>> v = -10 >>> type(v) <type 'int'>

리터럴 문자 시퀀스:

 >>> v = 'hi' >>> type(v) <type 'str'>

부동 소수점 정수:

 >>> v = 3.14159 >>> type(v) <type 'float'>

Community Wiki

너무 간단합니다. 당신은 이렇게합니다.

 print(type(variable_name))

Vaibhav

Python에서 변수 유형을 결정하는 방법은 무엇입니까?

예를 들어 변수가 있는 경우:

 one = 1

유형을 알고 싶습니까?

파이썬에는 거의 모든 일을 하는 올바른 방법과 잘못된 방법이 있습니다. 올바른 방법은 다음과 같습니다.

사용 type

 >>> type(one) <type 'int'>

__name__ 속성을 사용하여 객체의 이름을 가져올 수 있습니다. __dunder__ 이름을 사용하여 접근해야 하는 몇 안 되는 특수 속성 중 하나입니다 inspect 모듈에는 이에 대한 메서드조차 없습니다.)

 >>> type(one).__name__ 'int'

__class__ 사용하지 마십시오.

Python에서 밑줄로 시작하는 이름은 의미상 공용 API의 일부가 아니며 사용자가 이러한 이름을 사용하지 않는 것이 가장 좋습니다. (절대적으로 필요한 경우를 제외하고.)

type 은 객체의 클래스를 제공하므로 직접 가져오는 것을 피해야 합니다. :

 >>> one.__class__

이것은 일반적으로 사람들이 메소드의 객체 유형에 액세스할 때 처음으로 생각하는 것입니다. 이미 속성을 찾고 있으므로 유형이 이상해 보입니다. 예를 들어:

 class Foo(object): def foo(self): self.__class__

하지마. 대신 type(self):

 class Foo(object): def foo(self): type(self)

int 및 float의 구현 세부정보

부호 없는 32비트, 부호 있는 16비트 등 변수의 유형을 보려면 어떻게 해야 합니까?

Python에서 이러한 세부 사항은 구현 세부 사항입니다. 따라서 일반적으로 Python에서는 일반적으로 이에 대해 걱정하지 않습니다. 하지만 궁금증을 풀어드리기 위해...

Python 2에서 int는 일반적으로 구현의 단어 너비와 동일한 부호 있는 정수입니다(시스템에 의해 제한됨). 일반적으로 C 에서 long 으로 구현됩니다. 정수가 이보다 커지면 일반적으로 Python long으로 변환합니다(C long과 혼동하지 않도록 무제한 정밀도로).

예를 들어, 32비트 Python 2에서 int는 부호 있는 32비트 정수임을 추론할 수 있습니다.

 >>> import sys >>> format(sys.maxint, '032b') '01111111111111111111111111111111' >>> format(-sys.maxint - 1, '032b') # minimum value, see docs. '-10000000000000000000000000000000'

Python 3에서는 오래된 int가 사라지고 무한한 정밀도 를 가진 int만큼 (Python의) long을 사용합니다.

또한 일반적으로 C 에서 double 로 구현되는 Python의 float에 대한 정보를 얻을 수도 있습니다.

 >>> sys.float_info sys.floatinfo(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.2204460492503131e-16, radix=2, rounds=1)

결론

__class__ 사용하여 변수 유형을 가져오지 마십시오. 대신 type 을 사용하십시오.

그리고 Python의 구현 세부 사항에 대해 너무 걱정하지 마십시오. 이 문제를 스스로 해결할 필요가 없었습니다. 당신도 아마 그렇게 하지 않을 것이며, 정말로 그렇게 한다면 무엇을 해야 할지에 대해 이 답변을 찾지 않을 만큼 충분히 알고 있어야 합니다.


Aaron Hall

print type(variable_name)

나는 또한 이와 같은 질문을 다룰 때 IPython 대화형 인터프리터를 강력히 추천합니다. variable_name을 입력할 수 variable_name? 유형 및 유형에 대한 문서 문자열을 포함하여 개체에 대한 전체 정보 목록을 반환합니다.

 In [9]: var = 123 In [10]: var? Type: int Base Class: <type 'int'> String Form: 123 Namespace: Interactive Docstring: int(x[, base]) -> integer

가능한 경우 문자열이나 숫자를 정수로 변환합니다. 부동 소수점 인수는 0으로 잘립니다(여기에는 부동 소수점 숫자의 문자열 표현이 포함되지 않습니다!). 문자열을 변환할 때 선택적 기본을 사용합니다. 문자열이 아닌 것을 변환할 때 기본을 제공하는 것은 오류입니다. 인수가 정수 범위를 벗어나면 대신 긴 객체가 반환됩니다.


Lawrence Johnston

a = "cool" type(a) //result 'str' <class 'str'> or do `dir(a)` to see the list of inbuilt methods you can have on the variable.

Ahmed Adewale

__class__ 사용하는 또 다른 방법:

 >>> a = [1, 2, 3, 4] >>> a.__class__ <type 'list'> >>> b = {'key1': 'val1'} >>> b.__class__ <type 'dict'> >>> c = 12 >>> c.__class__ <type 'int'>

アレックス

Python에서 간단한 유형 검사의 예:

 assert type(variable_name) == int assert type(variable_name) == bool assert type(variable_name) == list

anh_ng8

조금 관련이 없을 수도 있습니다. 그러나 여기에 언급된 대로 isinstance(object, type) 를 사용하여 객체의 유형을 확인할 수 있습니다.


skjoshi

질문이 다소 모호합니다. "보기"가 무엇을 의미하는지 잘 모르겠습니다. 네이티브 Python 객체의 유형 을 쿼리 하려는 경우 @atzz 의 답변이 올바른 방향으로 안내할 것입니다.

그러나 기본 C 유형(예: uint32_t , int16_t )의 의미를 갖는 Python 객체를 생성 하려는 경우 struct 모듈을 사용하십시오. 다음과 같이 주어진 C 유형 프리미티브의 비트 수를 결정할 수 있습니다.

 >>> struct.calcsize('c') # char 1 >>> struct.calcsize('h') # short 2 >>> struct.calcsize('i') # int 4 >>> struct.calcsize('l') # long 4

이는 다음과 같은 하위 유형의 배열을 만들 수 array 모듈에도 반영됩니다.

 >>> array.array('c').itemsize # char 1

지원되는 최대 정수(Python 2의 int )는 sys.maxint 에 의해 제공됩니다.

 >>> import sys, math >>> math.ceil(math.log(sys.maxint, 2)) + 1 # Signedness 32.0

잔여 메모리 에 있는 Python 객체의 실제 크기를 반환하는 sys.getsizeof 도 있습니다.

 >>> a = 5 >>> sys.getsizeof(a) # Residual memory. 12

부동 소수점 데이터 및 정밀도 데이터의 경우 sys.float_info를 사용하십시오.

 >>> sys.float_info sys.floatinfo(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.2204460492503131e-16, radix=2, rounds=1)

cdleary

Python 또는 ctypes 사용을 의미합니까?

첫 번째 경우에는 단순히 할 수 없습니다. Python에는 부호 있는/부호 없는 16/32비트 정수가 없기 때문입니다.

두 번째 경우에는 type() 사용할 수 있습니다.

 >>> import ctypes >>> a = ctypes.c_uint() # unsigned int >>> type(a) <class 'ctypes.c_ulong'>

해당 유형인 ctypes에 대한 자세한 내용 은 공식 문서를 참조하십시오.


rob

Python에는 귀하가 설명하는 것과 같은 유형이 없습니다. : 두 개의 정수 값을 나타내는 데 사용되는 종류가 있습니다 int 플랫폼의 INT의 C 입력하고에 해당하고, long (필요하고 상한을하지 않는 즉, 그것은 성장) 임의 정밀도의 정수입니다. int 저장할 수 없는 결과를 생성하면 int 는 자동으로 long 변환됩니다.


atzz

단순, Python 3.4 이상

 print (type(variable_name))

파이썬 2.7 이상

 print type(variable_name)

Priyansh

그것은 당신이 의미하는 수준에 따라 다릅니다. int ( sys.maxint 로 제한됨) 및 long (무제한 정밀도)의 두 가지 정수 유형이 있습니다. 파이썬 코드에서는 숫자가 너무 클 때 인터프리터가 자동으로 long으로 변환하기 때문에 이것은 약간의 차이가 없어야 합니다. 기본 인터프리터에서 사용되는 실제 데이터 유형에 대해 알고 싶다면 구현에 따라 다릅니다. (CPython은 Objects/intobject.c 및 Objects/longobject.c에 있습니다.) 시스템 유형에 대해 알아보려면 struct 모듈 사용에 대한 cdleary 답변을 확인하세요.


Benjamin Peterson

python2.x의 경우 다음을 사용하십시오.

 print type(variable_name)

python3.x의 경우 다음을 사용하십시오.

 print(type(variable_name))

Prince Dhadwal

type() 함수를 사용해야 합니다. 이렇게:

 my_variable = 5 print(type(my_variable)) # Would print out <class 'int'>

이 함수는 목록이든 클래스이든 모든 변수의 유형을 봅니다. 자세한 내용은 이 웹사이트를 확인하십시오: https://www.w3schools.com/python/ref_func_type.asp


MCDeveloper11

그냥하지 마십시오. 어떤 유형을 묻는 것 자체가 잘못된 것입니다. 대신 다형성을 사용하십시오. 가능한 모든 유형의 입력에 대해 원하는 작업을 수행하는 메서드를 찾거나 필요한 경우 스스로 정의하고 아무 것도 묻지 않고 호출합니다. 기본 제공 유형 또는 타사 라이브러리에서 정의한 유형으로 작업해야 하는 경우 항상 해당 유형에서 상속하고 대신 고유한 파생 상품을 사용할 수 있습니다. 또는 자신의 클래스 안에 래핑할 수 있습니다. 이러한 문제를 해결하기 위한 객체지향 방식입니다.

정확한 유형을 확인하고 여기저기에 if __class__ 속성이나 type 함수를 사용하여 이를 수행할 수 있지만 곧 두세 번 커밋할 때마다 추가 사례로 if OO 방식으로 하면 이를 방지하고 대신 새로운 유형의 입력에 대해 새 클래스만 정의할 수 있습니다.


Sventimir

출처 : http:www.stackoverflow.com/questions/402504/how-to-determine-a-python-variables-type

반응형