Qual é a diferença entre uma expressão e uma instrução em Python?

319

No Python, qual é a diferença entre expressões e declarações?

wassimans
fonte

Respostas:

242

Expressões contêm apenas identificadores , literais e operadores , onde os operadores incluem operadores aritméticos e booleanos, a função de operador de chamada () do operador de subscrição [] e semelhantes, e pode ser reduzido a uma espécie de "valor", que pode ser qualquer objeto Python. Exemplos:

3 + 5
map(lambda x: x*x, range(10))
[a.x for a in some_iterable]
yield 7

Declarações (consulte 1 ,2 ), por outro lado, são tudo o que pode formar uma linha (ou várias linhas) de código Python. Observe que expressões também são declarações. Exemplos:

# all the above expressions
print 42
if x: do_y()
return
a = 7
Sven Marnach
fonte
17
expressões são partes de declarações
bismigalis
59
@ bismigalis: Toda expressão Python válida pode ser usada como uma declaração (chamada de "declaração de expressão" ). Nesse sentido, expressões são declarações.
Sven Marnach
2
Expressões também podem incluir chamadas de função (incluindo chamadas de classes para instanciação de objetos). Tecnicamente, esses são "identificadores" exatamente como nomes vinculados a valores em uma instrução = ... mesmo que a ligação seja por meio das palavras-chave 'def' ou 'class'. No entanto, para esta resposta, eu explicaria separadamente as chamadas de função para deixar isso claro.
Jim Dennis
2
@ George Fair o suficiente. :) As instruções de expressão são bastante úteis mesmo fora do REPL - é bastante comum usar expressões de chamada de função como instruções de expressão, por exemplo, print("Hello world!")ou my_list.append(42).
Sven Marnach 28/05/19
3
@WillTaylor Tudo o que gera um valor é uma expressão, ou seja, tudo o que você pode escrever no lado de gravação de uma tarefa. Desde que a = yield 7é válido, yield 7é uma expressão. Há muito tempo, yieldfoi introduzido como uma declaração, mas foi generalizado para uma expressão no PEP 342 .
Sven Marnach 22/08/19
120

Expressão - do New Oxford American Dictionary :

expressão: matemática uma coleção de símbolos que expressam conjuntamente uma quantidade: a expressão para a circunferência de um círculo é 2πr.

Em termos gerais brutos: as expressões produzem pelo menos um valor.

No Python, as expressões são abordadas extensivamente na Referência da linguagem Python. Em geral, as expressões no Python são compostas por uma combinação sintaticamente legal de átomos , primárias e operadores .

Expressões Python da Wikipedia

Exemplos de expressões:

Literais e combinações sintaticamente corretas com operadores e funções integradas ou a chamada de funções escritas pelo usuário:

>>> 23
23
>>> 23l
23L
>>> range(4)
[0, 1, 2, 3] 
>>> 2L*bin(2)
'0b100b10'
>>> def func(a):      # Statement, just part of the example...
...    return a*a     # Statement...
... 
>>> func(3)*4
36    
>>> func(5) is func(a=5)
True

Declaração da Wikipedia:

Na programação de computadores, uma declaração pode ser considerada o menor elemento independente de uma linguagem de programação imperativa. Um programa é formado por uma sequência de uma ou mais instruções. Uma declaração terá componentes internos (por exemplo, expressões).

Instruções Python da Wikipedia

Em termos gerais gerais: as declarações fazem alguma coisa e geralmente são compostas por expressões (ou outras declarações)

A Referência da Linguagem Python abrange extensivamente Instruções Simples e Instruções Compostas .

A distinção de "Declarações faz alguma coisa" e "expressões produzem um valor", porém, a distinção pode ficar embaçada:

  • As compreensões de lista são consideradas "Expressões", mas elas têm construções em loop e, portanto, também fazem algo.
  • A ifé geralmente uma declaração, tais como if x<0: x=0, mas você também pode ter uma expressão condicional , como x=0 if x<0 else 1que são expressões. Em outros idiomas, como C, esse formulário é chamado de operador como estex=x<0?0:1;
  • Você pode escrever suas próprias expressões escrevendo uma função. def func(a): return a*aé uma expressão quando usada, mas composta de instruções quando definida.
  • Uma expressão que retorna Noneé um procedimento no Python: def proc(): passsintaticamente, você pode usar proc()como expressão, mas isso provavelmente é um bug ...
  • Python é um pouco mais rigoroso do que dizer que C está nas diferenças entre uma expressão e uma instrução. Em C, qualquer expressão é uma declaração legal. Você pode ter func(x=2);uma expressão ou declaração? ( Resposta: Expressão usada como uma declaração com efeito colateral. ) A declaração de atribuição x=2dentro da chamada de função de func(x=2)no Python define o argumento nomeado acomo 2 somente na chamada funce é mais limitado que o exemplo C.
dawg
fonte
"Do meu dicionário" significa sua opinião pessoal ou o dicionário que você possui como o dicionário oxford? Obrigado
Talespin_Kit 5/10/19
1
@Talespin_Kit: ... sua opinião pessoal ou o dicionário que você possui como o dicionário Oxford? Boa pergunta. Usei o aplicativo Apple Dictionary em um Mac baseado no New Oxford American Dictionary.
dawg 14/01
80

Embora isso não esteja relacionado ao Python:

Um expressionavalia para um valor. A statementfaz alguma coisa.

>>> x + 2         # an expression
>>> x = 1         # a statement 
>>> y = x + 1     # a statement
>>> print y       # a statement (in 2.x)
2
user225312
fonte
3
Mas observe que em todas as línguas, exceto as realmente "puras", as expressões podem "fazer alguma coisa" (mais formalmente: ter um efeito colateral) também.
@ delnan: Você pode dar um exemplo (curioso)? Eu não estou ciente.
user225312
4
Da mesma forma somelist.append(123),. A maioria das chamadas de função, na verdade.
Thomas K
13
y = x + 1 não é uma expressão, mas uma afirmação. Tente eval ("y = x + 1") e você terá um erro.
Arglanir #
3
y = x +1 é uma expressão
Emmanuel Osimosu 15/10
13

Instruções representam uma ação ou comando, por exemplo , instruções de impressão, instruções de atribuição.

print 'hello', x = 1

Expressão é uma combinação de variáveis, operações e valores que produz um valor de resultado.

5 * 5 # yields 25

Por fim, instruções de expressão

print 5*5
Emmanuel Osimosu
fonte
8

Uma expressão é algo que pode ser reduzido a um valor, por exemplo "1+3"ou"foo = 1+3" .

É fácil verificar:

print foo = 1+3

Se não funcionar, é uma declaração, se funcionar, é uma expressão.

Outra afirmação poderia ser:

class Foo(Bar): pass

pois não pode ser reduzido a um valor.

Flavius
fonte
1
Como a execução do seu primeiro exemplo mostraria, a atribuição não é uma expressão (na verdade, isso é - a = b = expré permitido, como um caso especial) em Python. Nas linguagens que extraem mais inspiração de C, é.
class Foo(bar):é o começo de uma declaração, não uma declaração completa.
Sven Marnach
1
foo = 1+3NÃO é uma expressão. É uma declaração (uma tarefa para ser mais preciso). A parte 1+3é uma expressão embora.
Pithikos
2
Minha formulação é muito, muito precisa: "Se não funcionar, é uma afirmação, se funciona, é uma expressão". Execute-o e você terá sua resposta.
Flavius
8
  1. Uma expressão é uma instrução que retorna um valor. Portanto, se ele pode aparecer no lado direito de uma atribuição ou como um parâmetro para uma chamada de método, é uma expressão.
  2. Algum código pode ser uma expressão ou uma instrução, dependendo do contexto. O idioma pode ter um meio de diferenciar os dois quando são ambíguos.
Steven Spungin
fonte
5

Uma expressão é alguma coisa, enquanto uma declaração faz alguma coisa.
Uma expressão também é uma declaração, mas deve ter um retorno.

>>> 2 * 2          #expression
>>> print(2 * 2)     #statement

PS: O intérprete sempre imprime os valores de todas as expressões.

donald jiang
fonte
na minha opinião, uma declaração é uma expressão com um valor nulo
Adalcar
3

DECLARAÇÃO:

Uma declaração é uma ação ou um comando que faz alguma coisa. Ex: If-Else, Loops..etc

val a: Int = 5
If(a>5) print("Hey!") else print("Hi!")

EXPRESSÃO:

Uma expressão é uma combinação de valores, operadores e literais que produz algo.

val a: Int = 5 + 5 #yields 10
Raja Shekar
fonte
Esta é uma duplicata da resposta existente: stackoverflow.com/questions/4728073/… .
Karel
1
Talvez seja duplicado, mas ele compartilha meus pontos de vista para a pergunta acima. Sem ofensa
Raja Shekar
1

Uma declaração contém uma palavra-chave.

Uma expressão não contém uma palavra-chave.

print "hello"é uma instrução, porque printé uma palavra-chave.

"hello" é uma expressão, mas a compactação de lista é contra isso.

A seguir, uma declaração de expressão e é verdadeira sem compreensão da lista:

(x*2 for x in range(10))
abifromkerala
fonte
4
Isso depende fortemente da sua definição de 'palavra-chave'. x = 1é uma afirmação perfeitamente correta, mas não contém palavras-chave.
Joost
Não, por exemplo, isé uma palavra-chave, mas x is ynão é necessariamente uma declaração (em geral, é apenas uma expressão).
benjimin
1

Expressões:

  • Expressões são formadas pela combinação de objectse operators.
  • Uma expressão tem um valor, que tem um tipo.
  • Sintaxe para uma expressão simples:<object><operator><object>

2.0 + 3é uma expressão que é avaliada 5.0e tem um tipo floatassociado a ela.

Afirmações

As instruções são compostas de expressão (s). Pode abranger várias linhas.

ssokhey
fonte
1

Existem algumas instruções que podem mudar o estado do nosso programa Python: criar ou atualizar variáveis, definir funções, etc.

E expressões apenas retornam algum valor não podem alterar o estado global ou local em uma função.

Mas agora temos :=, é um alienígena!

roachsinai
fonte
-1

O Python chama expressões "declarações de expressão", portanto a questão talvez não esteja totalmente formada.

Uma instrução consiste em praticamente tudo o que você pode fazer no Python: calcular um valor, atribuir um valor, excluir uma variável, imprimir um valor, retornar uma função, gerar uma exceção etc. A lista completa está aqui: http: // docs.python.org/reference/simple_stmts.html#

Uma declaração de expressão é limitada a chamar funções (por exemplo, math.cos (theta) "), operadores (por exemplo," 2 + 3 ") etc. para produzir um valor.

Walter Nissen
fonte
10
Não, o Python não chama expressões "declarações de expressão". Python chama declarações que consistem apenas em uma única expressão "expressão".
Sven Marnach
... e não está sozinho fazendo isso.
-1

Eu acho que uma expressão contém operadores + operandos e o objeto que contém o resultado da operação ... por exemplo

var sum = a + b;

mas uma instrução é simplesmente uma linha de um código (pode ser uma expressão) ou bloco de código ... por exemplo

fun printHello(name: String?): Unit {
if (name != null)
    println("Hello ${name}")
else
    println("Hi there!")
// `return Unit` or `return` is optional

}

Rashid Iqbal
fonte