eu tenho o seguinte código
num1 = 10
someBoolValue = True
Eu preciso definir o valor de num1
para 20
se someBoolValue
é True
; e não faça nada de outra maneira. Então, aqui está o meu código para isso
num1 = 20 if someBoolValue else num1
Existe alguma maneira de evitar a ...else num1
parte para torná-la mais limpa? Um equivalente a
if someBoolValue:
num1 = 20
Eu tentei substituindo-o ...else pass
assim: num1=20 if someBoolValue else pass
. Tudo o que recebi foi erro de sintaxe. Nem eu poderia simplesmente omitir a ...else num1
parte.
python
if-statement
bdhar
fonte
fonte
num1 = 20 if someBoolValue else 10
. Então você salva anum1=10
linha também?num1
já existe ...Respostas:
Eu não acho que isso seja possível no Python, pois o que você realmente está tentando fazer provavelmente se expande para algo assim:
Se você excluir
else num1
, receberá um erro de sintaxe, pois tenho certeza de que a atribuição deve realmente retornar algo.Como outros já mencionaram, você pode fazer isso, mas é ruim porque provavelmente acabará se confundindo ao ler esse pedaço de código da próxima vez:
Eu não sou um grande fã do
num1 = someBoolValue and 20 or num1
mesmo pela mesma razão. Na verdade, tenho que pensar duas vezes no que essa linha está fazendo.A melhor maneira de realmente conseguir o que você quer fazer é a versão original:
A razão pela qual é a melhor versão é porque é muito óbvio o que você quer fazer e não se confunde, ou quem mais entrará em contato com esse código posteriormente.
Além disso, como nota lateral,
num1 = 20 if someBoolValue
é válido o código Ruby, porque o Ruby funciona de maneira um pouco diferente.fonte
num1 = (20 if someBoolValue else num1)
.Usa isto:
fonte
Em uma linha:
Mas não faça isso. Esse estilo normalmente não é esperado. As pessoas preferem a forma mais longa para maior clareza e consistência.
(Igualmente, as tampas de camelo devem ser evitadas. Portanto, use
some_bool_value
.)Observe que uma expressão em linha
some_value if predicate
semelse
parte não existe porque não haveria um valor de retorno se o predicado fosse falso. No entanto, as expressões devem ter um valor de retorno claramente definido em todos os casos. Isso é diferente do uso, como em, por exemplo, Ruby ou Perl.fonte
você pode usar um dos seguintes:
fonte
True
/False
, uma vez quebool
é uma subclasse deint
. Em todos os casos em que o teste retorna algo que apenas avaliaria true, ele falha com uma exceção. O segundo funciona apenas desdetrueVal
que não avalie o próprio falso, o que resultaria em serfalseVal
atribuído mesmo que o teste fosse verdadeiro.Não. Acho que você esperava que algo assim
num1 = 20 if someBoolValue
funcionasse, mas não funciona. Eu acho que a melhor maneira é com aif
declaração como você a escreveu:fonte
Essa é a minha nova resposta final. A resposta anterior foi a seguinte e foi um exagero para o problema declarado. Getting_too_clever ==
not Good
. Aqui está a resposta anterior ... ainda é boa se você quiser adicionar uma coisa paraTrue
cond e outra paraFalse
:Você mencionou
num1
já teria um valor que deveria ser deixado em paz. Presuminum1 = 10
que essa é a primeira declaração do post, então a operação a ser realizada20
é adicionar10
.produziu essa saída
fonte
fonte
Se você deseja invocar um método se algum valor booleano for verdadeiro, pode colocar
else None
para finalizar o trinary.fonte
Se um código de linha definitivamente vai acontecer para você, o Python 3.8 apresenta expressões de atribuição afetuosamente conhecidas como "o operador da morsa".
A
20
será atribuídonum
se a primeira expressão booleana éTrue
. A atribuição deve estar entre parênteses aqui, caso contrário, você receberá um erro de sintaxe.fonte
Para o futuro viajante do tempo do google, aqui está uma nova maneira (disponível no python 3.8 em diante):
fonte
Você pode definitivamente usar num1 = (20 se someBoolValue else num1) se desejar.
fonte
Aqui está o que eu posso sugerir. Use outra variável para derivar a cláusula if e atribua-a a num1.
Código:
fonte
Outra maneira
num1 = (20*boolVar)+(num1*(not boolVar))
fonte
Você pode fazer assim.
Você pode resolver seu problema dessa maneira, mas usar 'try / except block' não é a melhor prática para python.
fonte