반응형
isinstance('aaa', basestring)와 isinstance(''aaa', str)의 차이는 무엇인가?
a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
3.0 이전 버전의 파이톤에는 "플레인 문자열"과 "유니코드 문자열"의 두 종류가 있다.일반 문자열(str
)는 라틴 문자 이외의 문자를 나타낼 수 없다(단순함을 위해 코드 페이지의 세부사항을 무시함).유니코드 문자열(unicode
)는 클링온과 같은 가상의 알파벳을 포함한 모든 알파벳의 문자를 나타낼 수 있다.
그럼 왜 두 종류의 문자열이 있는 거지? 유니코드만 있으면 모든 경우를 망라할 텐데?음, 유니코드만 가지고 있는 것이 더 낫지만 유니코드가 문자열을 표현하기 위해 선호되는 방법이 되기 전에 파이썬이 만들어졌다.많은 사용자가 사용하는 언어로 문자열 유형을 전환하는 데는 시간이 걸리는데, 파이썬 3.0에서는 마지막으로 모든 문자열이 유니코드인 경우가 있다.
3.0 이전 Python 문자열의 상속 계층은 다음과 같다.
object
|
|
basestring
/ \
/ \
str unicode
Python 2.3에 도입된 'basestring'은 물체가 하나의 예인지 여부를 확인하는 데 사용될 수 있어 끈 통일의 방향으로의 한 단계라고 생각할 수 있다.str
또는unicode
>>> string1 = "I am a plain string"
>>> string2 = u"I am a unicode string"
>>> isinstance(string1, str)
True
>>> isinstance(string2, str)
False
>>> isinstance(string1, unicode)
False
>>> isinstance(string2, unicode)
True
>>> isinstance(string1, basestring)
True
>>> isinstance(string2, basestring)
True
모든 문자열은 기본 링이지만 유니코드 문자열은 str 타입이 아니다.대신 다음을 시도해 보십시오.
>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False
정말로 당신이 묻고 있는 것은 기초 계층과 일반 계층의 차이점이다.
Str은 기초자로부터 물려받은 계급이다.하지만 유니코드 문자열은 다른 문자열이 만들기를 원한다면 다른 문자열이 존재할 수 있다.
>>> a = u'aaaa'
>>> isinstance(a, str)
False
>>> isinstance(a, basestring)
True
베이스스트링은 스트링의 슈퍼클래스다.당신의 예에서 a는 "str"형이기 때문에, 그것은 기초가 되기도 하고 strrr이 되기도 한다.
반응형
'programing' 카테고리의 다른 글
vue 라우터 링크를 vue 구성 요소에 연결하는 방법 (0) | 2022.03.27 |
---|---|
Vue: 메서드가 인라인 템플릿 구성 요소 태그 내의 함수가 아님 (0) | 2022.03.27 |
각도 4 Ngx-datable Filter 미작동 객체가 null이지만 액세스됨(조건이 있는 경우에도) (0) | 2022.03.27 |
경로에 @를 추가하는 방법 nuxtjs.예: example.com/@properties (0) | 2022.03.27 |
기본 리액션에서 텍스트에 스트라이크를 추가하는 방법? (0) | 2022.03.27 |