Qual è la differenza tra un'espressione e un'istruzione in Python?


Risposte:


242

Espressioni contengono solo identificatori , letterali e operatori , in cui gli operatori includono operatori aritmetici e booleani, la funzione di operatore di chiamata () del operatore sottoscrizione [] e simili, e possono essere ridotti a una sorta di "valore", che può essere qualsiasi oggetto Python. Esempi:

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

Dichiarazioni (vedi 1 ,2 ), d'altra parte, sono tutto ciò che può costituire una riga (o più righe) di codice Python. Nota che anche le espressioni sono dichiarazioni. Esempi:

# all the above expressions
print 42
if x: do_y()
return
a = 7

17
le espressioni fanno parte delle dichiarazioni
bismigalis,

59
@bismigalis: ogni espressione Python valida può essere utilizzata come un'istruzione (chiamata "istruzione di espressione" ). In questo senso, le espressioni sono dichiarazioni.
Sven Marnach,

2
Le espressioni possono anche includere chiamate di funzioni (comprese le classi di chiamata per l'istanza di oggetti). Tecnicamente questi sono "identificatori" esattamente come i nomi associati ai valori in un'istruzione = ... anche se l'associazione avviene tramite le parole chiave "def" o "class". Tuttavia, per questa risposta vorrei precisare separatamente le chiamate di funzione per chiarire ciò.
Jim Dennis,

2
@George Abbastanza giusto. :) dichiarazioni di espressione sono molto utili anche al di fuori del REPL - è abbastanza comune l'uso di espressioni chiamata di funzione come le dichiarazioni di espressione, ad esempio print("Hello world!")o my_list.append(42).
Sven Marnach,

3
@WillTaylor Tutto ciò che produce un valore è un'espressione, cioè tutto ciò che potresti scrivere sul lato di scrittura di un compito. Poiché a = yield 7è valido, yield 7è un'espressione. Molto tempo fa, è yieldstato introdotto come una dichiarazione, ma è stato generalizzato a un'espressione in PEP 342 .
Sven Marnach,

120

Espressione - dal nuovo dizionario americano di Oxford :

espressione: matematica una raccolta di simboli che esprimono congiuntamente una quantità: l'espressione per la circonferenza di un cerchio è 2πr.

In termini generali lordi: le espressioni producono almeno un valore.

In Python, le espressioni sono ampiamente trattate nel riferimento al linguaggio Python In generale, le espressioni in Python sono composte da una combinazione sintatticamente legale di atomi , primarie e operatori .

Espressioni Python da Wikipedia

Esempi di espressioni:

Letterali e combinazioni sintatticamente corrette con gli operatori e le funzioni integrate o il richiamo di funzioni scritte dall'utente:

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

Dichiarazione di Wikipedia:

Nella programmazione del computer un'affermazione può essere considerata come il più piccolo elemento autonomo di un linguaggio di programmazione imperativo. Un programma è formato da una sequenza di una o più istruzioni. Un'istruzione avrà componenti interni (ad esempio espressioni).

Dichiarazioni Python da Wikipedia

In termini generali grossolani: le dichiarazioni fanno qualcosa e sono spesso composte da espressioni (o altre dichiarazioni)

Il Python Language Reference copre ampiamente le istruzioni semplici e le istruzioni composte .

La distinzione di "Dichiarazioni fa qualcosa" e "espressioni producono un valore", tuttavia la distinzione può diventare sfocata:

  • Le comprensioni dell'elenco sono considerate "espressioni" ma hanno costrutti ciclici e quindi anche "Fai qualcosa".
  • Di ifsolito è un'affermazione, come if x<0: x=0ma puoi anche avere un'espressione condizionale come x=0 if x<0 else 1quella sono espressioni. In altre lingue, come C, questo modulo è chiamato un operatore come questox=x<0?0:1;
  • Puoi scrivere le tue espressioni scrivendo una funzione. def func(a): return a*aè un'espressione quando utilizzata ma composta da istruzioni quando definita.
  • Un'espressione che ritorna Noneè una procedura in Python: def proc(): passsintatticamente, puoi usarla proc()come espressione, ma probabilmente è un bug ...
  • Python è un po 'più severo di quanto C affermi sulle differenze tra un'espressione e una dichiarazione. In C, ogni espressione è una dichiarazione legale. Puoi avere func(x=2);Espressione o dichiarazione? ( Risposta: espressione utilizzata come istruzione con un effetto collaterale. ) L'istruzione di assegnazione x=2all'interno della chiamata di funzione di func(x=2)in Python imposta l'argomento denominato asu 2 solo nella chiamata a funced è più limitata dell'esempio C.

"Dal mio dizionario" significa la tua opinione personale o il dizionario che possiedi come il dizionario di Oxford? Grazie
Talespin_Kit

1
@Talespin_Kit: ... la tua opinione personale o il dizionario che possiedi come il dizionario Oxford? Buona domanda. Ho usato l'app Dizionario di Apple su un Mac basato sul New Oxford American Dictionary.
Dawg

80

Anche se questo non è correlato a Python:

Un expressionvaluta un valore. A statementfa qualcosa.

>>> x + 2         # an expression
>>> x = 1         # a statement 
>>> y = x + 1     # a statement
>>> print y       # a statement (in 2.x)
2

3
Ma nota che in tutte le lingue tranne quelle veramente "pure", anche le espressioni possono "fare qualcosa" (più formalmente: avere un effetto collaterale).

@delnan: puoi fare un esempio (curioso)? Non sono consapevole.
user225312

4
Analogamente, somelist.append(123). La maggior parte delle chiamate di funzione, davvero.
Thomas K,

13
y = x + 1 non è un'espressione ma un'istruzione. Prova eval ("y = x + 1") e avrai un errore.
Arglanir,

3
y = x +1 è una dichiarazione di espressione
Emmanuel Osimosu,

13

Le dichiarazioni rappresentano un'azione o un comando, ad esempio istruzioni di stampa, istruzioni di assegnazione.

print 'hello', x = 1

L'espressione è una combinazione di variabili, operazioni e valori che produce un valore risultato.

5 * 5 # yields 25

Infine, dichiarazioni di espressione

print 5*5

8

Un'espressione è qualcosa che può essere ridotta a un valore, ad esempio "1+3"o "foo = 1+3".

È facile controllare:

print foo = 1+3

Se non funziona, è un'affermazione, se funziona, è un'espressione.

Un'altra affermazione potrebbe essere:

class Foo(Bar): pass

in quanto non può essere ridotto a un valore.


1
Come l'esecuzione del tuo primo esempio mostrerebbe, l'assegnazione non è un'espressione (non proprio, cioè - a = b = exprè consentita, come un caso speciale) in Python. In lingue che traggono maggiore ispirazione da C, lo è.

class Foo(bar):è l'inizio di un'affermazione, non un'affermazione completa.
Sven Marnach,

1
foo = 1+3NON è un'espressione. È un'affermazione (un incarico per essere precisi). La parte 1+3è un'espressione però.
Pithikos,

2
La mia formulazione è molto, molto precisa: "Se non funziona, è un'affermazione, se funziona, è un'espressione". Eseguilo e avrai la tua risposta.
Flavio

8
  1. Un'espressione è un'istruzione che restituisce un valore. Quindi, se può apparire sul lato destro di un'assegnazione o come parametro per una chiamata di metodo, è un'espressione.
  2. Alcuni codici possono essere sia un'espressione che un'istruzione, a seconda del contesto. La lingua può avere un mezzo per distinguere tra i due quando sono ambigui.

5

Un'espressione è qualcosa, mentre un'affermazione fa qualcosa.
Anche un'espressione è un'affermazione, ma deve avere un ritorno.

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

PS: l'interprete stampa sempre i valori di tutte le espressioni.


a mio avviso, una dichiarazione è un'espressione con un valore nullo
Adalcar,

3

DICHIARAZIONE:

Un'istruzione è un'azione o un comando che fa qualcosa. Es: If-Else, Loops..etc

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

ESPRESSIONE:

Un'espressione è una combinazione di valori, operatori e valori letterali che produce qualcosa.

val a: Int = 5 + 5 #yields 10

Questo è un duplicato di questa risposta esistente: stackoverflow.com/questions/4728073/… .
karel

1
Forse è duplicato ma condivide le mie opinioni per la domanda sopra. Senza offesa
Raja Shekar

1

Un'istruzione contiene una parola chiave.

Un'espressione non contiene una parola chiave.

print "hello"è un'istruzione, perché printè una parola chiave.

"hello" è un'espressione, ma la compressione dell'elenco è contro questo.

Quanto segue è una dichiarazione di espressione ed è vera senza la comprensione dell'elenco:

(x*2 for x in range(10))

4
Ciò dipende fortemente dalla definizione di "parola chiave". x = 1è una dichiarazione perfettamente valida, ma non contiene parole chiave.
Joost

No, ad esempio isè una parola chiave ma x is ynon è necessariamente un'affermazione (in generale è solo un'espressione).
benjimin,

1

espressioni:

  • Le espressioni si formano combinando objectse operators.
  • Un'espressione ha un valore, che ha un tipo.
  • Sintassi per un'espressione semplice:<object><operator><object>

2.0 + 3è un'espressione che valuta 5.0e ha un tipo floatassociato.

dichiarazioni

Le dichiarazioni sono composte da espressioni. Può estendersi su più righe.


1

Ci sono alcune affermazioni che potrebbero cambiare lo stato del nostro programma Python: creare o aggiornare variabili, definire funzioni, ecc.

E le espressioni restituiscono solo un valore che non può cambiare lo stato globale o lo stato locale in una funzione.

Ma ora abbiamo :=, è un alieno!


-1

Python chiama le espressioni "dichiarazioni di espressione", quindi la domanda forse non è del tutto formata.

Un'istruzione è composta praticamente da tutto ciò che puoi fare in Python: calcolare un valore, assegnare un valore, eliminare una variabile, stampare un valore, tornare da una funzione, sollevare un'eccezione, ecc. L'elenco completo è qui: http: // docs.python.org/reference/simple_stmts.html#

Un'istruzione expression è limitata alle funzioni di chiamata (ad es. Math.cos (theta) "), agli operatori (ad es." 2 + 3 "), ecc. Per produrre un valore.


10
No, Python non chiama le espressioni "istruzioni di espressione". Python chiama istruzioni costituite solo da una singola espressione "istruzioni expression".
Sven Marnach,

... e non è il solo a farlo.

-1

Penso che un'espressione contenga operatori + operandi e l'oggetto che contiene il risultato dell'operazione ... ad es

var sum = a + b;

ma un'istruzione è semplicemente una riga di un codice (può essere un'espressione) o un blocco di codice ... ad es

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

}

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.