Olha o que achei no https://pt.stackoverflow.com/questions/367418/declara%C3%A7%C3%A3o-if-uso-de-parenteses#:~:text=O%20uso%20de%20par%C3%AAnteses%2C%20em,com%20a%20performance%20de%20execu%C3%A7%C3%A3o.&text=Princ%C3%ADpios%20de%20c%C3%B3digo%20limpo%2C%20claro,s%C3%A3o%20afetados%20por%20esta%20decis%C3%A3o. Acho que ajuda na sua duvida
O uso de parênteses, em especial para ifewhile, em Python, é mais uma decisão de engenharia de software e manutenibilidade, não tendo esta qualquer relação com a performance de execução. 3
Princípios de código limpo, claro e correto, importantes para a qualidade de software, são afetados por esta decisão.
Portanto, você deve utilizar parênteses quando estes ajudarão na leitura e entendimento do código. 5
Um ponto aqui destacável é dizer sobre a precedência de operadores, e nestes casos, o programador deve/necessita utilizar os parênteses para controle da ordem de execução das avaliações.
Como:
print(1 + 1 * 2, (1 + 1) * 2) # print 3 4
Compartilhar
Melhore esta resposta
Seguir
respondida 11/03/2019 às 6:44
sbrubes's user avatar
sbrubes
1.00855 medalhas de prata1313 medalhas de bronze
Adicione um comentário
0
Não há nenhum ganho ou perda no uso de parênteses extras em expressões como if e while. Eles não são obrigatórios na linguagem justamente para simplificar a leitura das expressões. o : no final dos comandos faz a separação da expressão para o bloco contido no comando - portanto não existe a ambiguidade potencial que existe em C e as linguagens que copiaram a sua sintaxe exigindo o parênteses no if.
Parenteses extras são automaticamente elimnados no estágio de compilação do programa (lembrando que a compilação em Python é automática). Veja como uma função que usa parênteses e outra que não são idênticas depois de compiladas:
In [15]: def a():
...: if qualquer_coisa == 1:
...: pass
...:
In [16]: def b():
...: if (qualquer_coisa == 1):
...: pass
...:
In [17]: import dis
In [18]: dis.dis(a)
2 0 LOAD_GLOBAL 0 (qualquer_coisa)
2 LOAD_CONST 1 (1)
4 COMPARE_OP 2 (==)
6 POP_JUMP_IF_FALSE 8
3 >> 8 LOAD_CONST 0 (None)
10 RETURN_VALUE
In [19]: dis.dis(b)
2 0 LOAD_GLOBAL 0 (qualquer_coisa)
2 LOAD_CONST 1 (1)
4 COMPARE_OP 2 (==)
6 POP_JUMP_IF_FALSE 8
3 >> 8 LOAD_CONST 0 (None)
10 RETURN_VALUE
Ou seja- o parênteses sequer está indicado no bytecode, que é o que é executado de fato - o processo de "descompilação" do dis.dis não tem nem como saber que ele existia no código fonte.
Note que isso não impede que você use parênteses para melhorar a legibilidade do código, sobretudo em expressões complexas de um if que podem ter que ser quebradas em mais de uma linha. Nesses casos, inclusive, os parênteses são preferíveis ao indicador de continuação de linha \