Python의 조건부 할당 연산자

Bhuwan Bhatt 2023년1월30일
  1. Ruby에서 ||= 연산자의 의미
  2. try...except 문을 사용하여 Python에서 Ruby의 ||= 조건부 할당 연산자 구현
  3. localglobal 변수를 사용하여 Python에서 Ruby의 ||= 조건부 할당 연산자 구현
Python의 조건부 할당 연산자

Python에는 Ruby의 ||= 연산자와 정확히 일치하는 것이 없습니다. 그러나 try...except 메서드와 로컬 및 전역 변수의 개념을 사용하여 Python에서 Ruby의 조건부 할당 연산자 ||=를 에뮬레이트할 수 있습니다.

Ruby에서 ||= 연산자의 의미

x ||= y

이 연산자의 기본 의미는 변수 x가 정의되지 않았거나 falsy 값인 경우 변수 y의 값을 변수 x에 할당하고, 그렇지 않으면 할당 작업이 수행되지 않습니다.

그러나 이 연산자는 +=, -=와 같은 다른 단순한 조건 연산자보다 훨씬 더 복잡하고 혼란스럽습니다. 변수가 정의되지 않은 것으로 나타날 때마다 콘솔에서 NameError가 발생하기 때문입니다.

‘a+=b’는 ‘a=a+b’로 평가됩니다.

a||=ba=a||b처럼 보이지만 실제로는 a||a=b처럼 작동합니다.

try...except 문을 사용하여 Python에서 Ruby의 ||= 조건부 할당 연산자 구현

오류를 포착하고 처리하기 위해 try...except를 사용합니다. try except 블록이 실행될 때마다 처음에는 try 블록에 있는 코드가 실행됩니다. try 블록 내의 코드 블록이 성공적으로 실행되면 except 블록은 무시됩니다. 그렇지 않으면 except 블록 코드가 실행되고 오류가 처리됩니다. Ruby의 ||= 연산자는 Python의 try-catch 방법으로 대략 다음과 같이 번역할 수 있습니다.

try:
    x
except NameError:
    x = 10

여기에서 변수 x가 정의되면 try 블록은 NameError 예외 없이 원활하게 실행됩니다. 따라서 할당 작업이 수행되지 않습니다. x가 정의되지 않은 경우 try 블록은 NameError를 생성한 다음 except 블록이 실행되고 변수 x10에 할당됩니다.

localglobal 변수를 사용하여 Python에서 Ruby의 ||= 조건부 할당 연산자 구현

지역 변수의 범위는 특정 코드 범위 내로 제한되는 반면 전역 변수는 전체 코드 공간에 정의된 범위를 갖습니다.

특정 범위의 모든 로컬 변수는 해당 특정 범위의 locals 사전 키로 사용할 수 있습니다. 모든 전역 변수는 globals 사전의 키로 저장됩니다. localsglobals 사전을 사용하여 필요할 때마다 이러한 변수에 액세스할 수 있습니다.

변수가 사전에 존재하는지 확인하고 존재하지 않는 경우에만 값을 설정하여 Python에서 Ruby의 ||= 조건부 할당 연산자를 번역할 수 있습니다.

if x in locals().keys():
    locals().get(x)
elif x in globals().keys():
    globals().get(x)
else:
    x = 10

여기서 변수 x가 전역 또는 로컬 범위에 있으면 할당 작업을 수행하지 않습니다. 그렇지 않으면 x의 값을 10에 할당합니다. Ruby의 x||=10과 유사합니다.

관련 문장 - Python Operator