Quelle est la différence entre une expression et une instruction en Python?

319

En Python, quelle est la différence entre les expressions et les instructions?

wassimans
la source

Réponses:

242

Les expressions ne contiennent que des identificateurs , littéraux et opérateurs , où les opérateurs comprennent les opérateurs arithmétiques et booléennes, la fonction opérateur d'appel () l' opérateur d'abonnement [] et similaire, et peuvent être réduits à une sorte de « valeur », qui peut être un objet Python. Exemples:

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

Déclarations (voir 1 ,2 ), d'autre part, sont tout ce qui peut constituer une ligne (ou plusieurs lignes) de code Python. Notez que les expressions sont également des instructions. Exemples:

# all the above expressions
print 42
if x: do_y()
return
a = 7
Sven Marnach
la source
17
les expressions font partie des déclarations
bismigalis
59
@bismigalis: Chaque expression Python valide peut être utilisée comme une instruction (appelée "instruction d'expression" ). En ce sens, les expressions sont des déclarations.
Sven Marnach
2
Les expressions peuvent également inclure des appels de fonction (y compris les classes d'appel pour l'instanciation d'objets). Techniquement, ce sont des "identificateurs" exactement comme les noms liés à des valeurs dans une instruction = ... même si la liaison se fait via les mots clés "def" ou "class". Cependant, pour cette réponse, j'expliquerais séparément les appels de fonction pour le clarifier.
Jim Dennis
2
@George Assez bien. :) Les instructions d'expression sont très utiles même en dehors de REPL - il est assez courant d'utiliser des expressions d'appel de fonction comme instructions d'expression, par exemple print("Hello world!")ou my_list.append(42).
Sven Marnach
3
@WillTaylor Tout ce qui donne une valeur est une expression, c'est-à-dire tout ce que vous pourriez écrire du côté écriture d'une affectation. Puisque a = yield 7est valide, yield 7est une expression. Il y a longtemps, a yieldété présenté comme une déclaration, mais il a été généralisé à une expression du PEP 342 .
Sven Marnach
120

Expression - du New Oxford American Dictionary :

expression: mathématiques une collection de symboles qui expriment conjointement une quantité: l'expression pour la circonférence d'un cercle est 2πr.

En termes généraux bruts: les expressions produisent au moins une valeur.

En Python, les expressions sont couvertes en détail dans le Python Language Reference En général, les expressions en Python sont composées d'une combinaison syntaxiquement légale d' atomes , de primaires et d' opérateurs .

Expressions Python de Wikipedia

Exemples d'expressions:

Littéraux et combinaisons syntaxiquement correctes avec les opérateurs et les fonctions intégrées ou l'appel d'une fonction écrite par l'utilisateur:

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

Déclaration de Wikipedia:

En programmation informatique, une déclaration peut être considérée comme le plus petit élément autonome d'un langage de programmation impératif. Un programme est formé d'une séquence d'une ou plusieurs instructions. Une instruction aura des composants internes (par exemple, des expressions).

Déclarations Python de Wikipedia

En termes généraux bruts: les déclarations font quelque chose et sont souvent composées d'expressions (ou d'autres déclarations)

La référence du langage Python couvre largement les instructions simples et les instructions composées .

La distinction "Les déclarations font quelque chose" et "les expressions produisent une valeur" peut cependant devenir floue:

  • Les compréhensions de liste sont considérées comme des "expressions" mais elles ont des constructions en boucle et donc aussi quelque chose.
  • Il ifs'agit généralement d'une instruction, telle que if x<0: x=0mais vous pouvez également avoir une expression conditionnelle comme x=0 if x<0 else 1celle-ci sont des expressions. Dans d'autres langages, comme C, ce formulaire est appelé un opérateur comme celui-cix=x<0?0:1;
  • Vous pouvez écrire vos propres expressions en écrivant une fonction. def func(a): return a*aest une expression lorsqu'elle est utilisée mais composée d'instructions lorsqu'elle est définie.
  • Une expression qui retourne Noneest une procédure en Python: def proc(): passsyntaxiquement, vous pouvez l'utiliser proc()comme expression, mais c'est probablement un bug ...
  • Python est un peu plus strict que disons que C est sur les différences entre une expression et une instruction. En C, toute expression est une déclaration légale. Vous pouvez avoir func(x=2);Est-ce une expression ou une déclaration? ( Réponse: Expression utilisée comme une instruction avec un effet secondaire. ) L'instruction d'affectation de l' x=2intérieur de l'appel de fonction func(x=2)en Python définit l'argument nommé aà 2 uniquement dans l'appel à funcet est plus limitée que l'exemple C.
dawg
la source
"From my Dictionary" signifie votre opinion personnelle ou le dictionnaire que vous possédez comme le dictionnaire oxford? Merci
Talespin_Kit
1
@Talespin_Kit: ... votre opinion personnelle ou le dictionnaire que vous possédez comme le dictionnaire Oxford? Bonne question. J'ai utilisé l'application Apple Dictionary sur un Mac basé sur le New Oxford American Dictionary.
Dawg
80

Bien que cela ne soit pas lié à Python:

Un expressionévalue à une valeur. A statementfait quelque chose.

>>> x + 2         # an expression
>>> x = 1         # a statement 
>>> y = x + 1     # a statement
>>> print y       # a statement (in 2.x)
2
user225312
la source
3
Mais notez que dans toutes les langues, à l'exception de celles qui sont vraiment vraiment «pures», les expressions peuvent «faire quelque chose» (plus formellement: avoir un effet secondaire) tout aussi bien.
@delnan: Pouvez-vous donner un exemple (curieux)? Je ne suis pas au courant.
user225312
4
De même, somelist.append(123). La plupart des appels de fonction, vraiment.
Thomas K
13
y = x + 1 n'est pas une expression mais une déclaration. Essayez eval ("y = x + 1") et vous aurez une erreur.
Arglanir
3
y = x +1 est une déclaration d'expression
Emmanuel Osimosu
13

Les instructions représentent une action ou une commande, par exemple des instructions d'impression, des instructions d'affectation.

print 'hello', x = 1

L'expression est une combinaison de variables, d'opérations et de valeurs qui donne une valeur de résultat.

5 * 5 # yields 25

Enfin, les déclarations d'expression

print 5*5
Emmanuel Osimosu
la source
8

Une expression est quelque chose qui peut être réduit à une valeur, par exemple "1+3"ou "foo = 1+3".

Il est facile de vérifier:

print foo = 1+3

Si cela ne fonctionne pas, c'est une déclaration, si c'est le cas, c'est une expression.

Une autre déclaration pourrait être:

class Foo(Bar): pass

car il ne peut pas être réduit à une valeur.

Flavius
la source
1
Comme le montre l'exécution de votre premier exemple, l'affectation n'est pas une expression (pas vraiment, c'est-à-dire a = b = exprest autorisée, comme cas spécial) en Python. Dans les langues qui s'inspirent davantage du C, c'est le cas.
class Foo(bar):est le début d'une instruction, pas une instruction complète.
Sven Marnach
1
foo = 1+3n'est PAS une expression. C'est une déclaration (une mission pour être précis). La partie 1+3est cependant une expression.
Pithikos
2
Ma formulation est très, très précise: "Si ça ne marche pas, c'est une affirmation, si c'est le cas, c'est une expression.". Exécutez-le et vous aurez votre réponse.
Flavius
8
  1. Une expression est une instruction qui renvoie une valeur. Donc, si elle peut apparaître sur le côté droit d'une affectation, ou en tant que paramètre d'un appel de méthode, c'est une expression.
  2. Certains codes peuvent être à la fois une expression ou une instruction, selon le contexte. La langue peut avoir un moyen de différencier les deux lorsqu'ils sont ambigus.
Steven Spungin
la source
5

Une expression est quelque chose, tandis qu'une déclaration fait quelque chose.
Une expression est également une déclaration, mais elle doit avoir un retour.

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

PS: L'interprète imprime toujours les valeurs de toutes les expressions.

donald jiang
la source
à mon avis, une déclaration est une expression avec une valeur nulle
Adalcar
3

DÉCLARATION:

Une déclaration est une action ou une commande qui fait quelque chose. Ex: If-Else, Loops..etc

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

EXPRESSION:

Une expression est une combinaison de valeurs, d'opérateurs et de littéraux qui donne quelque chose.

val a: Int = 5 + 5 #yields 10
Raja Shekar
la source
Il s'agit d'un doublon de cette réponse existante: stackoverflow.com/questions/4728073/… .
karel
1
C'est peut-être en double mais il partage mon point de vue pour la question ci-dessus. Aucune infraction
Raja Shekar
1

Une instruction contient un mot-clé.

Une expression ne contient pas de mot-clé.

print "hello"est une déclaration, car printest un mot-clé.

"hello" est une expression, mais la compression de liste est contre cela.

Ce qui suit est une déclaration d'expression, et il est vrai sans compréhension de liste:

(x*2 for x in range(10))
abifromkerala
la source
4
Cela dépend fortement de votre définition d'un «mot clé». x = 1est une déclaration parfaitement fine, mais ne contient pas de mots clés.
Joost
Non, par exemple isest un mot-clé mais x is yn'est pas nécessairement une déclaration (en général, ce n'est qu'une expression).
benjimin
1

Expressions:

  • Les expressions sont formées en combinant objectsetoperators .
  • Une expression a une valeur, qui a un type.
  • Syntaxe d'une expression simple:<object><operator><object>

2.0 + 3est une expression qui évalue 5.0et a un type qui lui est floatassocié.

Déclarations

Les déclarations sont composées d'expressions. Il peut s'étendre sur plusieurs lignes.

ssokhey
la source
1

Il y a quelques instructions qui pourraient changer l'état de notre programme Python: créer ou mettre à jour des variables, définir une fonction, etc.

Et les expressions qui renvoient simplement une valeur ne peuvent pas changer l'état global ou l'état local dans une fonction.

Mais maintenant nous avons :=, c'est un extraterrestre!

roachsinai
la source
-1

Python appelle les expressions "déclarations d'expression", donc la question n'est peut-être pas complètement formulée.

Une instruction consiste à peu près tout ce que vous pouvez faire en Python: calculer une valeur, assigner une valeur, supprimer une variable, imprimer une valeur, revenir d'une fonction, lever une exception, etc. La liste complète est ici: http: // docs.python.org/reference/simple_stmts.html#

Une instruction d'expression est limitée aux fonctions d'appel (par exemple, math.cos (thêta) "), aux opérateurs (par exemple," 2 + 3 "), etc. pour produire une valeur.

Walter Nissen
la source
10
Non, Python n'appelle pas les expressions "instructions d'expression". Python appelle des instructions uniquement constituées d'une seule expression "expressions expression".
Sven Marnach
... et ce n'est pas le seul à le faire.
-1

Je pense qu'une expression contient des opérateurs + opérandes et l'objet qui contient le résultat de l'opération ... par exemple

var sum = a + b;

mais une déclaration est simplement une ligne de code (ce peut être une expression) ou un bloc de code ... par exemple

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

}

Rashid Iqbal
la source