Python 변수의 유형을 확인하는 방법은 무엇입니까?
변수 유형을 확인하려면 어떻게 해야 합니까?(예를 들어 부호 없는 32비트)
내장된 기능을 사용합니다.
>>> i = 123
>>> type(i)
<type 'int'>
>>> type(i) is int
True
>>> i = 123.456
>>> type(i)
<type 'float'>
>>> type(i) is float
True
변수가 특정 유형의 변수인지 확인하려면 다음과 같이 사용합니다.
>>> i = 123
>>> isinstance(i, int)
True
>>> isinstance(i, (float, str, set, dict))
False
Python은 C/C++와 같은 타입을 가지고 있지 않다는 점에 유의하십시오.
빌트인 기능을 찾고 있는 경우가 있습니다.
아래의 예를 참조해 주세요만, 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'>
정말 단순해요.이렇게 하면 돼요.
print(type(variable_name))
Python에서 변수 유형을 결정하는 방법은 무엇입니까?
변수가 있는 경우 예를 들어 다음과 같습니다.
one = 1
종류 알고 싶어요?
Python에서는 모든 것을 할 수 있는 올바른 방법과 잘못된 방법이 있습니다.올바른 방법은 다음과 같습니다.
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__
하지 마십시오. 대신 다음을 입력하십시오.
class Foo(object):
def foo(self):
type(self)
int 및 float 구현 상세
변수 유형이 부호 없는 32비트인지, 부호 있는 16비트인지 등을 확인하려면 어떻게 해야 합니까?
Python에서는 이러한 세부 사항이 구현 세부 사항입니다.일반적으로 Python에서는 이 문제에 대해 걱정하지 않습니다.하지만 당신의 호기심을 충족시키기 위해...
Python 2에서 int는 일반적으로 구현의 워드 폭과 같은 부호 있는 정수입니다(시스템에 의해 제한됨).보통 C에서는 long으로 구현됩니다.정수가 이것보다 커지면 보통 Python longs로 변환합니다(C longs와 혼동하지 않고 무제한 정밀도).
예를 들어 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 는 없어지고, (Python's) 는 int 로서 사용할 뿐이며, 그 정밀도는 무제한입니다.
Python의 플로트에 대한 정보도 얻을 수 있습니다.이 플로트는 보통 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)
결론
마세요__class__
변수 유형을 가져오려면 , 의미론적으로 공개되지 않은 API 를 사용합니다.type
★★★★★★ 。
그리고 Python의 구현 세부 사항에 대해서는 너무 걱정하지 마세요.나는 이 문제를 직접 다루지 않아도 되었다.당신도 아마 그렇게 하지 않을 것이고, 만약 정말로 그렇게 한다면, 당신은 무엇을 해야 할지 이 대답을 기대하지 않아도 될 만큼 충분히 알아야 한다.
print type(variable_name)
또, 이러한 질문에 대해서는, IPython 인터랙티브 인터프리터를 강하게 추천합니다.입력이 가능합니다.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을 향해 잘립니다(부동 소수점 번호의 문자열 표현은 포함되지 않습니다).문자열을 변환할 때는 옵션 base를 사용합니다.비문자열 변환 시 베이스를 지정하는 것은 오류입니다.인수가 정수 범위를 벗어나면 긴 개체가 대신 반환됩니다.
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.
「」를 사용하는 또 :__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
, 할 수 .isinstance(object, type)
여기서 말한 바와 같이
그 질문은 다소 애매합니다. "보기"가 무슨 뜻인지 잘 모르겠습니다.네이티브 Python 객체의 유형을 문의하려고 하면 @atz의 답변이 올바른 방향으로 유도됩니다.
단, Python 오브젝트를 생성하려고 하는 경우 기본 C-type의 의미론(예:uint32_t
,int16_t
모듈을 사용합니다.따라서 특정 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
2 원원py pypy pypy ( Python 2 's )int
)는 sys.maxint에 의해 지정됩니다.
>>> import sys, math
>>> math.ceil(math.log(sys.maxint, 2)) + 1 # Signedness
32.0
sys.getsizeof도 있습니다.이것은 나머지 메모리에 있는 Python 객체의 실제 크기를 반환합니다.
>>> 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)
당신은 파이썬 사용하거나 ctypes에 의미하나요?
첫번째 경우에, 여러분은 단지-때문에 파이썬, 고로 16/32 비트 정수 signed/unsigned이 아닐 수 있다.
'어울릴 수 없다'를 사용할 수 .type()
:
>>> import ctypes
>>> a = ctypes.c_uint() # unsigned int
>>> type(a)
<class 'ctypes.c_ulong'>
ctypes, 이 형식에 더 많은 참고로 공식 문서를 참조하십시오.
네가 설명한 그대로 파이선 그런 형식을 가지고 있지 않는다.두 가지 .int
및 " 타입에 대응하고 있습니다.long
의 정밀도 정수 int
됩니다.long
에서 결과를 수 , 그 는 에는되지 않습니다.int
.
심플, 파이톤 3성적이다.
print (type(variable_name))
파이선 2.7과 위
print type(variable_name)
정말 당신이 어느 단계 뜻이냐에 달려 있다.2.에서는, 타입, 「」 2.x 「」가 있습니다.int
)sys.maxint
및 )의 개요long
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★Python 코드에서는 숫자가 너무 크면 인터프리터가 자동으로 long으로 변환되기 때문에 이것은 전혀 차이가 없습니다.오브젝트 / intobject.c 오브젝트 / 긴 오브젝트다)시스템 유형에 대한 자세한 내용은 구조 모듈 사용에 대한 답변을 참조하십시오.
python2.x의 경우,
print type(variable_name)
python3.x의 경우,
print(type(variable_name))
하다를 돼요.type()
다음과 같이 합니다.
my_variable = 5
print(type(my_variable)) # Would print out <class 'int'>
이 함수는 목록이든 클래스든 변수의 유형을 표시합니다.상세한 것에 대하여는, 다음의 Web 사이트를 참조해 주세요.https://www.w3schools.com/python/ref_func_type.asp
Python은 동적으로 입력된 언어입니다.처음에 문자열로 작성된 변수는 나중에 정수 또는 플로트로 재할당할 수 있습니다.그리고 통역사는 불평하지 않을 것이다.
name = "AnyValue"
# Dynamically typed language lets you do this:
name = 21
name = None
name = Exception()
변수 유형을 확인하려면 type() 또는 isinstance() 삽입 함수를 사용합니다.고객의 행동을 확인해 봅시다.
Python3의 예:
variable = "hello_world"
print(type(variable) is str) # True
print(isinstance(variable, str)) # True
두 방법을 해 볼까요?performances
python3 33 서3 서
python3 -m timeit -s "variable = 'hello_world'" "type(variable) is int"
5000000 loops, best of 5: 54.5 nsec per loop
python3 -m timeit -s "variable = 'hello_world'" "isinstance(variable, str)"
10000000 loops, best of 5: 39.2 nsec per loop
유형은 약 40% 느립니다(54.5/39.2 = 1.390).
하면 될 것 같아요.type(variable) == str
될 것 이 아니야.먹히긴 하겠지만 좋은 생각이 아니야
==
변수 값을 확인할 때 사용해야 합니다.변수 값이 "hello_world"와 동일한지 확인하기 위해 사용합니다.그러나 변수가 문자열인지 확인하려면 연산자가 더 적합한지 확인합니다.어느쪽인가를 사용하는 경우의 상세한 것에 대하여는, 이 문서를 참조해 주세요.==
느리다: 더 느리다.python3 -m timeit -s "variable = 'hello_world'" "type(variable) == str" 5000000 loops, best of 5: 64.4 nsec per loop
인스턴스와 유형의 차이
이 두 기능의 차이는 속도뿐만이 아닙니다.실제로, 동작 방식에는 중요한 차이가 있습니다.
- type은 개체의 유형(클래스)만 반환합니다.이를 사용하여 변수가 str 유형인지 확인할 수 있습니다.
isinstance
는 지정된 오브젝트(첫 번째 파라미터)가 다음 상태인지 여부를 확인합니다.- 두 번째 매개 변수로 지정된 클래스의 인스턴스.예를 들어 변수는 str 클래스의 인스턴스입니까?
- 또는 두 번째 매개 변수로 지정된 클래스의 하위 클래스 인스턴스입니다.즉, 변수는 str의 서브클래스의 인스턴스입니까?
실제로는 어떤 의미일까요?예를 들어 목록 역할을 하지만 추가 메서드가 있는 사용자 지정 클래스를 만들 수 있습니다.따라서 목록 유형을 하위 분류하고 사용자 지정 함수를 내부에 추가할 수 있습니다.
class MyAwesomeList(list):
# Add additional functions here
pass
그러나 이 새 클래스를 목록과 비교하면 유형과 인스턴스가 다른 결과를 반환합니다.
my_list = MyAwesomeList()
print(type(my_list) is list) # False
print(isinstance(my_list, list)) # True
는 즉석인지 아닌지를 확인하기 때문에 결과가 .my_list
않음)은 목록의 서브클래스가 아니기 때문입니다).MyAwesomeList
는 목록의 서브클래스입니다).이 차이를 잊으면 코드에 미묘한 버그가 발생할 수 있습니다.
결론들
isinstance
일반적으로 유형을 비교하는 데 선호되는 방법입니다.속도가 빠를 뿐만 아니라 종종 바람직한 동작인 상속도 고려합니다.Python에서는 보통 특정 객체가 문자열 또는 목록처럼 동작하는지 확인하고 싶어하지만 반드시 문자열일 필요는 없습니다.따라서 문자열 및 해당 모든 사용자 지정 하위 클래스를 확인하는 대신 isinstance를 사용할 수 있습니다.
- 를 사용합니다.type
사할할음, 음음음음음 . . . . . . . . . . . ..type(var) is some_type
는 할 수 없습니다.type(var) == some_type
.
32비트, 64비트, 16비트는 없습니다. 비단뱀은 단순하기 때문에 걱정할 필요가 없습니다.유형을 확인하는 방법을 참조하십시오.
integer = 1
print(type(integer)) # Result: <class 'int'>, and if it's a string then class will be str and so on.
# Checking the type
float_class = 1.3
print(isinstance(float_class, float)) # True
그러나 꼭 필요한 경우 부호 없는 정수 같은 유형을 가진 Ctypes 라이브러리를 사용할 수 있습니다.
다음과 같이 사용할 수 있습니다.
from ctypes import *
uint = c_uint(1) # Unsigned integer
print(uint) # Output: c_uint(1)
# To actually get the value, you have to call .value
print(uint.value)
# Change value
uint.value = 2
print(uint.value) # 2
python에는 다음과 같은 많은 데이터 유형이 있습니다.
Text Type: str
Numeric Types: int, float, complex
Sequence Types: list, tuple, range
Mapping Type: dict
Set Types: set, frozenset
Boolean Type: bool
Binary Types: bytes, bytearray, memoryview
None Type: NoneType
여기에 모든 유형의 데이터 유형 예시와 그 유형을 인쇄하는 목록이 포함된 코드를 작성했습니다.
L = [
"Hello World",
20,
20.5,
1j,
["apple", "banana", "cherry"],
("apple", "banana", "cherry"),
range(6),
{"name" : "John", "age" : 36},
{"apple", "banana", "cherry"},
frozenset({"apple", "banana", "cherry"}),
True,
b"Hello",
bytearray(5),
memoryview(bytes(5)),
None
]
for _ in range(len(L)):
print(type(L[_]))
출력:
<class 'str'>
<class 'int'>
<class 'float'>
<class 'complex'>
<class 'list'>
<class 'tuple'>
<class 'range'>
<class 'dict'>
<class 'set'>
<class 'frozenset'>
<class 'bool'>
<class 'bytes'>
<class 'bytearray'>
<class 'memoryview'>
<class 'NoneType'>
그냥 하지 마세요.어떤 종류의 것을 요구하는 것 자체가 잘못된 것이다.대신 다형을 사용하세요.가능한 모든 유형의 입력에 대해 원하는 방법을 찾거나 필요에 따라 직접 정의하고 아무 것도 묻지 않고 호출합니다.타사 라이브러리에서 정의된 기본 제공 유형 또는 유형을 사용해야 하는 경우 언제든지 이러한 유형에서 상속하고 대신 고유한 파생 모델을 사용할 수 있습니다.아니면 수업시간에 포장할 수도 있어요.이것이 이러한 문제를 해결하기 위한 객체 지향적인 방법입니다.
이 정확한 종류를 을 놓기를 한다면.if
여기, , 여기, 여기, 여기, 여기, 여기, 여기, 여기, 여기,__class__
또는 "Property"type
할 수 있습니다.if
는 2개 또는 3개의 커밋마다 추가 케이스가 있습니다.OO 방식으로 하면 이러한 문제가 방지되고 대신 새로운 유형의 입력에 대한 새 클래스만 정의할 수 있습니다.
언급URL : https://stackoverflow.com/questions/402504/how-to-determine-a-python-variables-type
'programing' 카테고리의 다른 글
Manjaro Linux: 소켓이 없어 Mariadb를 실행할 수 없습니다. (0) | 2022.09.15 |
---|---|
Stripe API 오류 수정 방법: "IntegrationError:지정된 요소에서 데이터를 검색할 수 없습니다." Vue 구성 요소에서? (0) | 2022.09.15 |
Python을 사용하여 문자열의 각 문자 반복 (0) | 2022.09.09 |
Vuex: [Vue warn] :계산된 속성 "사용자 이름"이 할당되었지만 설정자가 없습니다. (0) | 2022.09.09 |
Python에서 여러 줄의 dict를 포맷하는 적절한 방법은 무엇입니까? (0) | 2022.09.09 |