Was ist der Unterschied zwischen einem Ausdruck und einer Anweisung in Python?


Antworten:


242

Ausdrücke enthalten nur Bezeichner , Literale und Operatoren , in denen die Betreiber umfassen arithmetische und Booleschen Operatoren, die Funktion Call - Betreiber () das Abonnement Operator [] und ähnliche, und kann bis zu einem gewissen Art von „Wert“ reduziert werden, was jede Python - Objekt sein kann. Beispiele:

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

Aussagen (siehe 1 ,2 ) sind dagegen alles, was eine Zeile (oder mehrere Zeilen) Python-Code ausmachen kann. Beachten Sie, dass Ausdrücke auch Anweisungen sind. Beispiele:

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

17
Ausdrücke sind Teile von Aussagen
bismigalis

59
@bismigalis: Jeder gültige Python-Ausdruck kann als Anweisung verwendet werden (als "Ausdrucksanweisung" bezeichnet ). In diesem Sinne Ausdrücke sind Aussagen.
Sven Marnach

2
Ausdrücke können auch Funktionsaufrufe enthalten (einschließlich Aufrufklassen für die Objektinstanziierung). Technisch gesehen sind dies "Bezeichner" genau wie Namen, die an Werte in einer = -Anweisung gebunden sind ... obwohl die Bindung über die Schlüsselwörter "def" oder "class" erfolgt. Für diese Antwort würde ich jedoch Funktionsaufrufe separat formulieren, um dies zu verdeutlichen.
Jim Dennis

2
@ George Fair genug. :) Ausdrucksanweisungen sind auch außerhalb der REPL sehr nützlich - es ist durchaus üblich, Funktionsaufrufausdrücke als Ausdrucksanweisungen zu verwenden, z . B. print("Hello world!")oder my_list.append(42).
Sven Marnach

3
@WillTaylor Alles, was einen Wert ergibt, ist ein Ausdruck, dh alles, was Sie auf die Schreibseite einer Aufgabe schreiben können. Da a = yield 7ist gültig, yield 7ist ein Ausdruck. Vor langer Zeit yieldwurde als Aussage eingeführt, aber es wurde zu einem Ausdruck in PEP 342 verallgemeinert .
Sven Marnach

120

Ausdruck - aus dem New Oxford American Dictionary :

Ausdruck: Mathematik eine Sammlung von Symbolen, die gemeinsam eine Größe ausdrücken: Der Ausdruck für den Umfang eines Kreises ist 2πr.

Allgemein ausgedrückt: Ausdrücke erzeugen mindestens einen Wert.

In Python werden Ausdrücke in der Python-Sprachreferenz ausführlich behandelt. Im Allgemeinen bestehen Ausdrücke in Python aus einer syntaktisch zulässigen Kombination von Atomen , Primärfarben und Operatoren .

Python-Ausdrücke aus Wikipedia

Beispiele für Ausdrücke:

Literale und syntaktisch korrekte Kombinationen mit Operatoren und integrierten Funktionen oder der Aufruf von benutzerdefinierten Funktionen:

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

Aussage aus Wikipedia:

In der Computerprogrammierung kann eine Anweisung als das kleinste eigenständige Element einer imperativen Programmiersprache angesehen werden. Ein Programm besteht aus einer Folge von einer oder mehreren Anweisungen. Eine Anweisung enthält interne Komponenten (z. B. Ausdrücke).

Python-Aussagen aus Wikipedia

Allgemein gesagt: Aussagen tun etwas und bestehen oft aus Ausdrücken (oder anderen Aussagen)

Die Python-Sprachreferenz behandelt ausführliche Anweisungen und zusammengesetzte Anweisungen ausführlich.

Die Unterscheidung zwischen "Anweisungen tun etwas" und "Ausdrücke erzeugen einen Wert" kann jedoch verschwimmen:

  • Listenverständnisse werden als "Ausdrücke" betrachtet, haben jedoch Schleifenkonstrukte und tun daher auch etwas.
  • Das ifist normalerweise eine Anweisung, wie zum Beispiel, if x<0: x=0aber Sie können auch einen bedingten Ausdruck wie x=0 if x<0 else 1diesen als Ausdrücke haben. In anderen Sprachen wie C wird dieses Formular als solcher Operator bezeichnetx=x<0?0:1;
  • Sie können Ihre eigenen Ausdrücke schreiben, indem Sie eine Funktion schreiben. def func(a): return a*aist ein Ausdruck, wenn er verwendet wird, der jedoch aus Anweisungen besteht, wenn er definiert ist.
  • Ein Ausdruck, der zurückgibt, Noneist eine Prozedur in Python: def proc(): passSyntaktisch können Sie ihn proc()als Ausdruck verwenden, aber das ist wahrscheinlich ein Fehler ...
  • Python ist etwas strenger als C die Unterschiede zwischen Ausdruck und Anweisung betrifft. In C ist jeder Ausdruck eine rechtliche Aussage. Sie können haben func(x=2);Ist das ein Ausdruck oder eine Aussage? ( Antwort: Ausdruck, der als Anweisung mit Nebeneffekt verwendet wird. ) Die Zuweisungsanweisung x=2innerhalb des Funktionsaufrufs von func(x=2)in Python setzt das benannte Argument anur im Aufruf von auf 2 funcund ist eingeschränkter als das C-Beispiel.

"Aus meinem Wörterbuch" bedeutet Ihre persönliche Meinung oder das Wörterbuch, das Sie besitzen, wie das Oxford-Wörterbuch? Danke
Talespin_Kit

1
@Talespin_Kit: ... Ihre persönliche Meinung oder das Wörterbuch, das Sie besitzen, wie das Oxford-Wörterbuch? Gute Frage. Ich habe die Apple Dictionary App auf einem Mac verwendet, der auf New Oxford American Dictionary basiert.
Morgengrauen

79

Obwohl dies nicht mit Python zusammenhängt:

A expressionwertet einen Wert aus. A statementmacht etwas.

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

3
Beachten Sie jedoch, dass Ausdrücke in allen Sprachen außer den wirklich wirklich "reinen" genauso gut "etwas tun" können (formeller: einen Nebeneffekt haben).

@delnan: Kannst du ein Beispiel geben (neugierig)? Ich bin mir nicht bewusst.
user225312

4
Ebenso somelist.append(123). Die meisten Funktionsaufrufe wirklich.
Thomas K

13
y = x + 1 ist kein Ausdruck, sondern eine Aussage. Versuchen Sie eval ("y = x + 1") und Sie werden einen Fehler haben.
Arglanir

3
y = x +1 ist eine Ausdrucksaussage
Emmanuel Osimosu

13

Anweisungen stellen eine Aktion oder einen Befehl dar, z. B. Druckanweisungen, Zuweisungsanweisungen.

print 'hello', x = 1

Ausdruck ist eine Kombination aus Variablen, Operationen und Werten, die einen Ergebniswert ergibt.

5 * 5 # yields 25

Zuletzt Ausdrucksanweisungen

print 5*5

8
  1. Ein Ausdruck ist eine Anweisung, die einen Wert zurückgibt. Wenn es also auf der rechten Seite einer Zuweisung oder als Parameter für einen Methodenaufruf angezeigt werden kann, ist es ein Ausdruck.
  2. Einige Codes können je nach Kontext sowohl ein Ausdruck als auch eine Anweisung sein. Die Sprache kann ein Mittel haben, um zwischen den beiden zu unterscheiden, wenn sie mehrdeutig sind.

7

Ein Ausdruck kann beispielsweise "1+3"oder auf einen Wert reduziert werden "foo = 1+3".

Es ist leicht zu überprüfen:

print foo = 1+3

Wenn es nicht funktioniert, ist es eine Aussage, wenn es funktioniert, ist es ein Ausdruck.

Eine andere Aussage könnte sein:

class Foo(Bar): pass

da es nicht auf einen Wert reduziert werden kann.


1
Wie die Ausführung Ihres ersten Beispiels zeigen würde, ist die Zuweisung in Python kein Ausdruck (nicht wirklich, dh - a = b = exprist als Sonderfall zulässig). In Sprachen, die sich mehr von C inspirieren lassen, ist dies der Fall.

class Foo(bar):ist der Anfang einer Aussage, keine vollständige Aussage.
Sven Marnach

1
foo = 1+3ist KEIN Ausdruck. Es ist eine Aussage (eine Aufgabe um genau zu sein). Der Teil 1+3ist jedoch ein Ausdruck.
Pithikos

2
Meine Formulierung ist sehr, sehr präzise: "Wenn es nicht funktioniert, ist es eine Aussage, wenn es funktioniert, ist es ein Ausdruck." Führen Sie es aus, und Sie haben Ihre Antwort.
Flavius

5

Ein Ausdruck ist etwas, während eine Aussage etwas bewirkt.
Ein Ausdruck ist ebenfalls eine Aussage, muss aber eine Rückgabe haben.

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

PS: Der Interpreter druckt immer die Werte aller Ausdrücke aus.


Meiner Meinung nach ist eine Aussage ein Ausdruck mit einem Nullwert
Adalcar

3

AUSSAGE:

Eine Anweisung ist eine Aktion oder ein Befehl, der etwas bewirkt. Beispiel: Wenn-sonst, Schleifen usw.

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

AUSDRUCK:

Ein Ausdruck ist eine Kombination aus Werten, Operatoren und Literalen, die etwas ergibt.

val a: Int = 5 + 5 #yields 10

Dies ist ein Duplikat dieser vorhandenen Antwort: stackoverflow.com/questions/4728073/… .
Karel

1
Vielleicht ist es doppelt, aber es teilt meine Ansichten für die obige Frage. Nichts für ungut
Raja Shekar

1

Eine Anweisung enthält ein Schlüsselwort.

Ein Ausdruck enthält kein Schlüsselwort.

print "hello"ist Aussage, weil printist ein Schlüsselwort.

"hello" ist ein Ausdruck, aber die Listenkomprimierung ist dagegen.

Das Folgende ist eine Ausdrucksanweisung, und sie ist ohne Listenverständnis wahr:

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

4
Das hängt stark von Ihrer Definition eines "Schlüsselworts" ab. x = 1ist eine sehr gute Aussage, enthält aber keine Schlüsselwörter.
Joost

Nein, z. B. isist ein Schlüsselwort, aber x is ynicht unbedingt eine Aussage (im Allgemeinen ist es nur ein Ausdruck).
Benjamin

1

Ausdrücke:

  • Ausdrücke werden durch Kombinieren von objectsund gebildet operators.
  • Ein Ausdruck hat einen Wert, der einen Typ hat.
  • Syntax für einen einfachen Ausdruck:<object><operator><object>

2.0 + 3ist ein Ausdruck, der ausgewertet wird 5.0und dem ein Typ floatzugeordnet ist.

Aussagen

Anweisungen bestehen aus Ausdrücken. Es kann mehrere Zeilen umfassen.


1

Es gibt einige Anweisungen, die den Status unseres Python-Programms ändern können: Variablen erstellen oder aktualisieren, Funktion definieren usw.

Und Ausdrücke, die nur einen Wert zurückgeben, können den globalen oder lokalen Status in einer Funktion nicht ändern.

Aber jetzt haben wir :=, es ist ein Außerirdischer!


-1

Python nennt Ausdrücke "Ausdrucksanweisungen", daher ist die Frage möglicherweise nicht vollständig formuliert.

Eine Anweisung besteht aus so ziemlich allem, was Sie in Python tun können: Berechnen eines Werts, Zuweisen eines Werts, Löschen einer Variablen, Drucken eines Werts, Zurückkehren von einer Funktion, Auslösen einer Ausnahme usw. Die vollständige Liste finden Sie hier: http: // docs.python.org/reference/simple_stmts.html#

Eine Ausdrucksanweisung beschränkt sich auf das Aufrufen von Funktionen (z. B. math.cos (theta) "), Operatoren (z. B." 2 + 3 ") usw., um einen Wert zu erzeugen.


10
Nein, Python nennt Ausdrücke nicht "Ausdrucksanweisungen". Python nennt Anweisungen, die nur aus einem einzelnen Ausdruck bestehen, "Ausdrucksanweisungen".
Sven Marnach

... und das ist nicht allein.

-1

Ich denke, ein Ausdruck enthält Operatoren + Operanden und das Objekt, das das Ergebnis der Operation enthält ... z

var sum = a + b;

Eine Anweisung ist jedoch einfach eine Codezeile (es kann sich um einen Ausdruck handeln) oder ein Codeblock ... z

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

}}

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.