python - type - 파이썬 변수의 타입을 결정하는 방법?




파이썬 변수 타입 (10)

어떻게 파이썬에서 변수 유형을 결정 하는가?

그래서 변수가 있다면, 예를 들면 :

one = 1

유형을 알고 싶습니까?

파이썬에서 모든 것을 할 수있는 올바른 방법과 잘못된 방법이 있습니다. 올바른 방법은 다음과 같습니다.

type 사용

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

__name__ 속성을 사용하여 객체의 이름을 가져올 수 있습니다. (이것은 __dunder__ 이름을 사용하여 __dunder__ 하는 데 필요한 몇 가지 특수 속성 중 하나입니다. inspect 모듈에는이 메소드가 없습니다.)

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

__class__ 사용하지 마십시오.

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

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

>>> one.__class__

이것은 대개 메소드에서 객체의 유형에 액세스 할 때 사람들이 가지고있는 첫 번째 아이디어입니다. 이미 속성을 찾고 있으므로 유형이 이상하게 보입니다. 예 :

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

하지마. 대신 (자기)을 입력하십시오.

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

int 및 float의 구현 세부 정보

부호없는 32 비트, 부호있는 16 비트 등 변수의 유형을 어떻게 확인할 수 있습니까?

파이썬에서 이러한 세부 사항은 구현 세부 사항입니다. 따라서 일반적으로 파이썬에서는이 점을 걱정하지 않습니다. 그러나, 당신의 호기심을 물리 치기 위해 ...

Python 2에서 int는 일반적으로 구현의 word 폭 (시스템에 의해 제한됨)과 동일한 부호있는 정수입니다. 일반적으로 C 언어 로 구현됩니다. 정수가 이보다 커지면 대개 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'

파이썬 3에서는 이전 int가 사라지고 무한 정밀도 를 갖는 int로 long을 사용 합니다.

우리는 파이썬의 부동 소수점에 관한 정보를 얻을 수 있는데, 일반적으로 C에서 이중 으로 구현됩니다 :

>>> 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)

결론

의미있는 비공유 API __class__ 사용하여 변수 유형을 가져 오지 마십시오. 대신 type 을 사용하십시오.

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

부호없는 32 비트, 부호있는 16 비트 등 변수의 유형을 어떻게 확인할 수 있습니까?

어떻게 볼 수 있습니까?


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

print type(variable_name)

python3.x에서는 다음을 사용하십시오.

print(type(variable_name))

그것은 당신이 의미하는 레벨에 달려 있습니다. Python 2.x에는 역사적인 이유로 int ( sys.maxintsys.maxint )와 long (무제한 정밀도)의 두 가지 정수 유형이 있습니다. 파이썬 코드에서 인터프리터는 숫자가 너무 길면 자동으로 변환되므로 약간의 차이는 없어야합니다. 기본 인터프리터에서 사용되는 실제 데이터 유형에 대해 알고 싶으면 구현에 따라 다릅니다. (CPython은 Objects / intobject.c와 Objects / longobject.c에 있습니다.) 시스템 유형에 대해 알아 보려면 struct 모듈을 사용하여 cdleary 응답을보십시오.


너무 간단합니다. 너는 이렇게 해.

print(type(variable_name))

파이썬 3.4 이상

print (type(variable_name))

파이썬 2.7 이상

print type(variable_name)

파이썬에는 C / C ++과 같은 유형이 없으므로 문제가됩니다.

이 시도:

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

파이썬 3.0에서는 int와 long을 구별하지 않습니다.


파이썬에서 간단한 타입 검사의 예 :

assert type(variable_name) == int

assert type(variable_name) == bool

assert type(variable_name) == list

Python 이나 ctypes 사용하고 싶습니까?

첫 번째 경우에는 파이썬이 부호있는 / 부호없는 16/32 비트 정수를 가지지 않기 때문에 불가능합니다.

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

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

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


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

아래 예제를 참고하십시오. 그러나 Python에는 Java와 같이 "unsigned"유형이 없습니다.

양의 정수:

>>> 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'>

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으로 잘립니다 (부동 소수점 숫자의 문자열 표현은 포함되지 않습니다!). 문자열을 변환 할 때 선택적인 기본을 사용하십시오. 비 문자열을 변환 할 때 자료를 제공하는 것은 오류입니다. 인수가 정수 범위를 벗어나면 long 객체가 대신 반환됩니다.





16-bit