¿Cuál es la diferencia entre una expresión y una declaración en Python?

319

En Python, ¿cuál es la diferencia entre expresiones y declaraciones?

wassimans
fuente

Respuestas:

242

Expresiones sólo contienen identificadores , literales y operadores , donde los operadores incluyen operadores aritméticos y booleanas, la función de operador de llamada de () la operador de suscripción [] y similares, y se pueden reducir a algún tipo de "valor", que puede ser cualquier objeto Python. Ejemplos:

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

Declaraciones (ver 1 ,2 ), por otro lado, son todo lo que puede formar una línea (o varias líneas) de código Python. Tenga en cuenta que las expresiones también son declaraciones. Ejemplos:

# all the above expressions
print 42
if x: do_y()
return
a = 7
Sven Marnach
fuente
17
expresiones son partes de declaraciones
bismigalis
59
@bismigalis: toda expresión Python válida se puede usar como una declaración (llamada "declaración de expresión" ). En este sentido, las expresiones son declaraciones.
Sven Marnach
2
Las expresiones también pueden incluir llamadas a funciones (incluidas clases de llamada para instanciación de objetos). Técnicamente, estos son "identificadores" exactamente como los nombres vinculados a valores en una declaración = ... aunque el enlace es a través de las palabras clave 'def' o 'class'. Sin embargo, para esta respuesta, deletrearía por separado las llamadas a funciones para que quede claro.
Jim Dennis
2
@ George bastante bien. :) Las declaraciones de expresión son bastante útiles incluso fuera de REPL; es bastante común usar expresiones de llamada a funciones como declaraciones de expresión, por ejemplo, print("Hello world!")o my_list.append(42).
Sven Marnach
3
@WillTaylor Todo lo que produce un valor es una expresión, es decir, todo lo que podría escribir en el lado de escritura de una tarea. Como a = yield 7es válido, yield 7es una expresión. Hace mucho tiempo, yieldse introdujo como una declaración, pero se generalizó a una expresión en PEP 342 .
Sven Marnach
120

Expresión : del New Oxford American Dictionary :

expresión: Matemáticas una colección de símbolos que expresan conjuntamente una cantidad: la expresión para la circunferencia de un círculo es 2πr.

En términos generales brutos: las expresiones producen al menos un valor.

En Python, las expresiones están cubiertas ampliamente en la Referencia del lenguaje Python. En general, las expresiones en Python están compuestas de una combinación sintácticamente legal de átomos , primarios y operadores .

Expresiones de Python de Wikipedia

Ejemplos de expresiones:

Literales y combinaciones sintácticamente correctas con operadores y funciones integradas o la llamada de funciones escritas por el usuario:

>>> 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

Declaración de Wikipedia:

En la programación de computadoras, una declaración puede considerarse como el elemento independiente más pequeño de un lenguaje de programación imperativo. Un programa está formado por una secuencia de una o más declaraciones. Una declaración tendrá componentes internos (p. Ej., Expresiones).

Declaraciones de Python de Wikipedia

En términos generales: las declaraciones hacen algo y a menudo se componen de expresiones (u otras declaraciones)

La Referencia del lenguaje Python cubre declaraciones simples y declaraciones compuestas ampliamente.

Sin embargo, la distinción de "declaraciones hacer algo" y "expresiones producen un valor" puede volverse borrosa:

  • Las comprensiones de listas se consideran "expresiones" pero tienen construcciones en bucle y, por lo tanto, también hacen algo.
  • El ifsuele ser una declaración, tales como if x<0: x=0, pero también puede tener una expresión condicional como x=0 if x<0 else 1que son expresiones. En otros lenguajes, como C, este formulario se llama operador como estex=x<0?0:1;
  • Puede escribir sus propias expresiones escribiendo una función. def func(a): return a*aes una expresión cuando se usa pero se compone de declaraciones cuando se define.
  • Una expresión que devuelve Nonees un procedimiento en Python: def proc(): passsintácticamente, puede usarlo proc()como una expresión, pero eso es probablemente un error ...
  • Python es un poco más estricto que decir que C está en las diferencias entre una Expresión y una Declaración. En C, cualquier expresión es una declaración legal. Puede tener func(x=2);¿Es eso una expresión o una declaración? ( Respuesta: Expresión utilizada como una instrucción con un efecto secundario ) . La instrucción de asignación del x=2interior de la llamada a la función func(x=2)en Python establece el argumento nombrado aa 2 solo en la llamada ay funces más limitado que el ejemplo C.
perro
fuente
¿"De mi diccionario" significa su opinión personal o el diccionario que posee como el diccionario de Oxford? Gracias
Talespin_Kit
1
@Talespin_Kit: ... ¿su opinión personal o el diccionario que posee como el diccionario Oxford? Buena pregunta. Utilicé la aplicación Apple Dictionary en una Mac que se basa en New Oxford American Dictionary.
Dawg
80

Aunque esto no está relacionado con Python:

Un expressionevalúa a un valor. A statementhace algo.

>>> x + 2         # an expression
>>> x = 1         # a statement 
>>> y = x + 1     # a statement
>>> print y       # a statement (in 2.x)
2
usuario225312
fuente
3
Pero tenga en cuenta que en todos los idiomas, excepto los realmente realmente "puros", las expresiones también pueden "hacer algo" (más formalmente: tener un efecto secundario).
@delnan: ¿Puedes dar un ejemplo (curioso)? No tengo conocimiento.
user225312
44
Del mismo modo, somelist.append(123). La mayoría de las llamadas a funciones, de verdad.
Thomas K
13
y = x + 1 no es una expresión sino una declaración. Prueba eval ("y = x + 1") y tendrás un error.
Arglanir
3
y = x +1 es una declaración de expresión
Emmanuel Osimosu
13

Las declaraciones representan una acción o comando, por ejemplo, imprimir declaraciones, declaraciones de asignación.

print 'hello', x = 1

La expresión es una combinación de variables, operaciones y valores que produce un valor de resultado.

5 * 5 # yields 25

Por último, declaraciones de expresión

print 5*5
Emmanuel Osimosu
fuente
8

Una expresión es algo que se puede reducir a un valor, por ejemplo "1+3"o"foo = 1+3" .

Es fácil verificar:

print foo = 1+3

Si no funciona, es una declaración, si lo hace, es una expresión.

Otra declaración podría ser:

class Foo(Bar): pass

ya que no se puede reducir a un valor.

Flavio
fuente
1
Como se vería en la ejecución de su primer ejemplo, la asignación no es una expresión (no realmente, es decir, a = b = exprestá permitido, como un caso especial) en Python. En lenguajes que se inspiran más en C, lo es.
class Foo(bar):es el comienzo de una declaración, no una declaración completa.
Sven Marnach
1
foo = 1+3NO es una expresión. Es una declaración (una tarea para ser precisos). Sin 1+3embargo, la parte es una expresión.
Pithikos
2
Mi formulación es muy, muy precisa: "Si no funciona, es una declaración, si lo hace, es una expresión". Ejecútelo y tendrá su respuesta.
Flavio el
8
  1. Una expresión es una declaración que devuelve un valor. Entonces, si puede aparecer en el lado derecho de una asignación, o como un parámetro para una llamada al método, es una expresión.
  2. Algunos códigos pueden ser tanto una expresión como una declaración, según el contexto. El lenguaje puede tener un medio para diferenciar entre los dos cuando son ambiguos.
Steven Spungin
fuente
5

Una expresión es algo, mientras que una declaración hace algo.
Una expresión también es una declaración, pero debe tener un retorno.

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

PD: El intérprete siempre imprime los valores de todas las expresiones.

Donald Jiang
fuente
en mi opinión, una declaración es una expresión con un valor nulo
Adalcar
3

DECLARACIÓN:

Una declaración es una acción o un comando que hace algo. Ej: If-Else, Loops..etc

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

EXPRESIÓN:

Una expresión es una combinación de valores, operadores y literales que produce algo.

val a: Int = 5 + 5 #yields 10
Raja Shekar
fuente
Este es un duplicado de esta respuesta existente: stackoverflow.com/questions/4728073/… .
karel
1
Tal vez sea duplicado pero comparte mis puntos de vista para la pregunta anterior. Sin ofender
Raja Shekar
1

Una declaración contiene una palabra clave.

Una expresión no contiene una palabra clave.

print "hello"es una declaración, porque printes una palabra clave.

"hello" es una expresión, pero la compresión de la lista está en contra de esto.

Lo siguiente es una declaración de expresión, y es cierto sin la comprensión de la lista:

(x*2 for x in range(10))
abifromkerala
fuente
44
Eso depende en gran medida de su definición de una 'palabra clave'. x = 1es una declaración perfectamente buena, pero no contiene palabras clave.
Joost
No, por ejemplo, ises una palabra clave pero x is yno es necesariamente una declaración (en general, es solo una expresión).
benjimin
1

Expresiones:

  • Las expresiones se forman combinando objectsy operators.
  • Una expresión tiene un valor, que tiene un tipo.
  • Sintaxis para una expresión simple:<object><operator><object>

2.0 + 3es una expresión que se evalúa 5.0y tiene un tipo floatasociado.

Declaraciones

Las declaraciones están compuestas de expresión (s). Puede abarcar varias líneas.

ssokhey
fuente
1

Hay algunas declaraciones que podrían cambiar el estado de nuestro programa Python: crear o actualizar variables, definir funciones, etc.

Y las expresiones que solo devuelven algún valor no pueden cambiar el estado global o el estado local en una función.

Pero ahora tenemos :=, es un extraterrestre!

roachsinai
fuente
-1

Python llama a las expresiones "declaraciones de expresión", por lo que la pregunta tal vez no esté completamente formada.

Una declaración consta de prácticamente todo lo que puede hacer en Python: calcular un valor, asignar un valor, eliminar una variable, imprimir un valor, regresar de una función, generar una excepción, etc. La lista completa está aquí: http: // docs.python.org/reference/simple_stmts.html#

Una declaración de expresión se limita a funciones de llamada (por ejemplo, math.cos (theta) "), operadores (por ejemplo," 2 + 3 "), etc. para producir un valor.

Walter Nissen
fuente
10
No, Python no llama a las expresiones "declaraciones de expresión". Python llama a las declaraciones que consisten en una sola expresión "declaraciones de expresión".
Sven Marnach
... y no está solo haciéndolo.
-1

Creo que una expresión contiene operadores + operandos y el objeto que contiene el resultado de la operación ... por ejemplo

var sum = a + b;

pero una declaración es simplemente una línea de un código (puede ser una expresión) o un bloque de código ... por ejemplo

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

}

Rashid Iqbal
fuente