Operador de atribuição condicional em Python
-
Significado de
||=Operador em Ruby -
Implementar o operador de atribuição condicional
||=do Ruby em Python usando a instruçãotry...except -
Implementar o operador de atribuição condicional
||=do Ruby em Python usando variáveis localeglobal
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.