파이썬에는 빈 문자열 변수와 같은 것이 있습니까?
if myString == string.empty:
그럼에도 불구하고 빈 문자열 값을 확인하는 가장 우아한 방법은 무엇입니까? ""
빈 문자열을 확인하기 위해 매번 하드 코딩 을하는 것이 좋지 않습니다.
답변
빈 문자열은 “거짓”입니다. 이는 부울 컨텍스트에서 거짓으로 간주되므로 다음과 같이하면됩니다.
if not myString:
변수가 문자열임을 알고있는 경우이 방법이 선호됩니다. 변수가 다른 유형일 수도있는 경우을 사용해야합니다 myString == ""
. 부울 컨텍스트에서 잘못된 다른 값 에 대해서는 진실 값 테스트 문서를 참조하십시오 .
답변
에서 PEP 8 의에서 “권장 사항 프로그래밍”섹션 :
시퀀스 (문자열, 목록, 튜플)의 경우 빈 시퀀스가 거짓이라는 사실을 사용하십시오.
따라서 다음을 사용해야합니다.
if not some_string:
또는:
if some_string:
그냥 순서가되어, 명확하게 평가 로 False
또는 True
그들이 비어 있거나없는 경우 부울 맥락에서. 그들은는 동일하지 에 False
나 True
.
답변
가장 우아한 방법은 다음과 같이 참인지 거짓인지 간단히 확인하는 것입니다.
if not my_string:
그러나 다음과 같은 이유로 공백을 제거 할 수 있습니다.
>>> bool("")
False
>>> bool(" ")
True
>>> bool(" ".strip())
False
그러나이 문자열이 어떤 종류의 유효성 검사를 통과했으며이 방법으로 테스트 할 수있는 문자열인지 확실하지 않은 경우에는이 부분에서 좀 더 명확해야합니다.
답변
벗기기 전에 테스트를하지 않을 것입니다. 또한 빈 문자열이 False (또는 Falsy)라는 사실을 사용합니다. 이 방법은 Apache의 StringUtils.isBlank 또는 Guava의 Strings.isNullOrEmpty 와 유사합니다.
이것은 문자열이 None 또는 Empty 또는 Blank인지 테스트하는 데 사용하는 것입니다.
def isBlank (myString):
if myString and myString.strip():
#myString is not None AND myString is not empty or blank
return False
#myString is None OR myString is empty or blank
return True
그리고 문자열이 None NOR Empty NOR Blank가 아닌 경우 테스트와 정확히 반대입니다.
def isNotBlank (myString):
if myString and myString.strip():
#myString is not None AND myString is not empty or blank
return True
#myString is None OR myString is empty or blank
return False
위 코드의 간결한 형태 :
def isBlank (myString):
return not (myString and myString.strip())
def isNotBlank (myString):
return bool(myString and myString.strip())
답변
나는 한 번 Bartek의 답변과 비슷한 것을 썼고 자바 스크립트에서 영감을 얻었습니다.
def is_not_blank(s):
return bool(s and s.strip())
테스트:
print is_not_blank("") # False
print is_not_blank(" ") # False
print is_not_blank("ok") # True
print is_not_blank(None) # False
답변
이 작업을 수행하는 유일한 확실한 방법은 다음과 같습니다.
if "".__eq__(myString):
다른 모든 솔루션에는 확인이 실패 할 수있는 가능한 문제 및 엣지 사례가 있습니다.
len(myString)==0
메소드 myString
를 상속 str
하고 __len__()
메소드를 대체 하는 클래스의 오브젝트 인 경우 실패 할 수 있습니다 .
마찬가지로 myString == ""
및 myString.__eq__("")
경우 실패 할 수 있습니다 myString
무시 __eq__()
하고 __ne__()
.
어떤 이유로 든 재정의 "" == myString
하면 바보가됩니다 .myString
__eq__()
myString is ""
그리고 "" is myString
동등합니다. myString
실제로 문자열이 아니라 문자열의 하위 클래스 인 경우 모두 실패 합니다 (둘 다 반환 False
). 또한 ID 확인이기 때문에 파이썬이 작동하는 유일한 이유는 파이썬이 문자열 풀링 (문자열 인턴이라고도 함)을 사용하여 문자열의 동일한 인스턴스를 사용하는 것입니다 (여기 : ‘= = ‘또는’is ‘는 때때로 다른 결과를 생성합니까? ). 그리고 ""
CPython의 시작부터 인턴
신원 확인의 큰 문제는 문자열 인턴이 어떤 문자열이 인턴되어 있는지 표준화되어 있지 않다는 것입니다. 즉, 이론적으로 ""
는 필요하지 않으며 구현에 따라 다릅니다.
실제로 속일 수없는 유일한 방법은 처음에 언급 한 방법입니다 "".__eq__(myString)
. 이것은 명시 적으로 __eq__()
빈 문자열 의 메소드를 호출하기 때문에 myString의 메소드를 대체하여 속일 수 없으며의 하위 클래스와 제대로 작동합니다 str
.
또한 객체가 __bool__()
메서드를 재정의하면 문자열의 거짓에 의존하는 것이 작동하지 않을 수 있습니다 .
이것은 이론적 인 작업 일뿐 만 아니라 실제로 프레임 워크 및 라이브러리 서브 클래스 화 str
를 사용하고 사용하여 myString is ""
잘못된 출력을 반환 할 수 있기 때문에 실제 사용과 관련이 있을 수 있습니다.
또한 is
문자열 풀링이 꽤 이상한 규칙을 따르기 때문에 때로는 올바르게 작동하지만 다른 시간에는 그렇지 않기 때문에 일반적으로 문자열을 사용 하는 것은 꽤 나쁜 함정입니다.
즉, 대부분의 경우 언급 된 모든 솔루션이 올바르게 작동합니다. 이 게시물은 대부분 학업입니다.
답변
비어 있거나 빈 문자열을 테스트하십시오 (짧은 방법).
if myString.strip():
print("it's not an empty or blank string")
else:
print("it's an empty or blank string")