본문 바로가기
Python/Python FAQ

C#의 null-coalescing 연산자에 대응하는 Python이 있나요?, Is there a Python equivalent of the C# null-coalescing operator?

by 베타코드 2023. 10. 24.
반응형

질문


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 yxTrue이거나 부울로 변환되어 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을 특별히 사용하지 않고도 기본 값을 트리거할 수 있습니다 (예: 오류 객체).

어떤 언어에서는 이 동작을 엘비스 연산자라고 합니다.

반응형

댓글