질문
C#에서는 null 병합 연산자 (??
로 작성됨)가 있어서 할당 중 쉬운(짧은) null 확인이 가능합니다:
string s = null;
var other = s ?? "some default value";
파이썬에는 이와 동등한 것이 있나요?
다음과 같이 할 수 있다는 것은 알고 있습니다:
s = None
other = s if s else "some default value"
하지만 더 짧은 방법이 있을까요 (s
를 반복하지 않아도 되는 방법)?
답변
other = s 또는 "일부 기본 값"
좋아, or
연산자가 어떻게 작동하는지 명확히 해야합니다. 이는 부울 연산자이므로 부울 컨텍스트에서 작동합니다. 값이 부울이 아닌 경우, 연산자의 목적을 위해 부울로 변환됩니다.
or
연산자는 True
또는 False
만 반환하는 것이 아님에 유의하세요. 대신, 첫 번째 피연산자가 true로 평가되면 첫 번째 피연산자를 반환하고, 첫 번째 피연산자가 false로 평가되면 두 번째 피연산자를 반환합니다.
이 경우, 표현식 x or y
는 x
가 True
이거나 부울로 변환되어 true로 평가될 경우 x
를 반환합니다. 그렇지 않으면 y
를 반환합니다. 대부분의 경우, 이는 C♯의 null-coalescing 연산자와 동일한 목적을 제공하지만 기억하세요:
42 or "something" # 42를 반환
0 or "something" # "something"을 반환
None or "something" # "something"을 반환
False or "something" # "something"을 반환
"" or "something" # "something"을 반환
변수 s
를 클래스의 인스턴스에 대한 참조 또는 None
중 하나로 사용하는 경우 (클래스가 __nonzero__()
및 __len__()
멤버를 정의하지 않는 한), null-coalescing 연산자와 동일한 의미론을 사용하는 것이 안전합니다.
실제로, Python의 이러한 부작용을 가지는 것은 심지어 유용할 수도 있습니다. false로 평가되는 값을 알고 있으므로, 이를 사용하여 None
을 특별히 사용하지 않고도 기본 값을 트리거할 수 있습니다 (예: 오류 객체).
어떤 언어에서는 이 동작을 엘비스 연산자라고 합니다.
댓글