Operador de atribuição condicional em Python

Bhuwan Bhatt 30 janeiro 2023
  1. Significado de ||= Operador em Ruby
  2. Implementar o operador de atribuição condicional ||= do Ruby em Python usando a instrução try...except
  3. Implementar o operador de atribuição condicional ||= do Ruby em Python usando variáveis ​​local e global
Operador de atribuição condicional em Python

Não há nenhum equivalente exato do operador ||= do Ruby em Python. No entanto, podemos usar o método try...except e conceitos de variáveis ​​locais e globais para emular o operador de atribuição condicional de Ruby ||= em Python.

Significado de ||= Operador em Ruby

x ||= y

O significado básico deste operador é atribuir o valor da variável y à variável x se a variável x for indefinida ou for um valor false, caso contrário, nenhuma operação de atribuição é realizada.

Mas este operador é muito mais complexo e confuso do que outros operadores condicionais mais simples como +=, -= porque sempre que qualquer variável é encontrada como indefinida, o console exibe NameError.

a+=b avalia como a=a+b.

a||=b parece a=a||b, mas na verdade se comporta como a=a||b.

Implementar o operador de atribuição condicional ||= do Ruby em Python usando a instrução try...except

Usamos try...except para detectar e tratar os erros. Sempre que o bloco try...except é executado, primeiro, o código contido no bloco try é executado. Se o bloco de código dentro do bloco try for executado com êxito, o bloco except será ignorado; caso contrário, o código do bloco except será executado e o erro será tratado. O operador ||= do Ruby pode ser traduzido aproximadamente no método try-catch do Python como:

try:
    x
except NameError:
    x = 10

Aqui, se a variável x for definida, o bloco try será executado suavemente sem nenhuma exceção NameError. Portanto, nenhuma operação de atribuição é executada. Se x não for definido, o bloco try gerará NameError, então o bloco except é executado e a variável x é atribuída a 10.

Implementar o operador de atribuição condicional ||= do Ruby em Python usando variáveis ​​local e global

O escopo das variáveis ​​locais é confinado em um escopo de código específico, enquanto as variáveis ​​globais têm seu escopo definido em todo o espaço do código.

Todas as variáveis ​​locais em um escopo específico estão disponíveis como chaves do dicionário locals naquele escopo específico. Todas as variáveis ​​globais são armazenadas como chaves do dicionário globals. Podemos acessar essas variáveis ​​sempre que necessário usando os locals e o dicionário globals.

Podemos verificar se uma variável existe em qualquer um dos dicionários e definir seu valor apenas se ela não existir para traduzir o operador de atribuição condicional ||= do Ruby em Python.

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

Aqui, se a variável x está presente no escopo global ou local, não realizamos nenhuma operação de atribuição; caso contrário, atribuímos o valor de x a 10. É semelhante a x||=10 em Ruby.

Artigo relacionado - Python Operator