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 local
eglobal
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.