Jaka jest różnica między wyrażeniem a instrukcją w Pythonie?


Odpowiedzi:


242

Wyrażenia zawierają tylko identyfikatory , literały i operatorów , w których operatorzy zawierają operatory arytmetyczne i logiczne, funkcja operator call operatora abonament i podobny, a może być zmniejszona do pewnego rodzaju „wartości”, która może być dowolny obiekt Pythona. Przykłady:() []

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

Oświadczenia (patrz 1 ,2 ), z drugiej strony, są wszystkim, co może składać się z linii (lub kilku linii) kodu Pythona. Zauważ, że wyrażenia również są instrukcjami. Przykłady:

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

17
wyrażenia są częścią oświadczeń
bismigalis

59
@bismigalis: Każde prawidłowe wyrażenie w języku Python może być użyte jako wyrażenie (zwane „wyrażeniem wyrażenia” ). W tym sensie wyrażenia wyrażeniami.
Sven Marnach,

2
Wyrażenia mogą również obejmować wywołania funkcji (w tym wywołanie klas w celu utworzenia instancji obiektu). Technicznie są to „identyfikatory” dokładnie tak, jak nazwy powiązane z wartościami w instrukcji = ... mimo że powiązanie odbywa się za pomocą słów kluczowych „def” lub „class”. Jednak dla tej odpowiedzi osobno przeliteruję wywołania funkcji, aby to wyjaśnić.
Jim Dennis

2
@George Fair wystarczy. :) Wyrażenia wyrażeń są użyteczne nawet poza REPL - dość często używa się wyrażeń wywołań funkcji jako wyrażeń wyrażeń, np . print("Hello world!")Lub my_list.append(42).
Sven Marnach

3
@WillTaylor Wszystko, co daje wartość, jest wyrażeniem, tzn. Wszystko, co można napisać po stronie przypisania zadania. Ponieważ a = yield 7jest poprawne, yield 7jest wyrażeniem. Dawno temu yieldzostał wprowadzony jako oświadczenie, ale uogólniono go na wyrażenie w PEP 342 .
Sven Marnach,

120

Wyrażenie - z New Oxford American Dictionary :

wyrażenie: matematyka zbiór symboli, które łącznie wyrażają pewną liczbę: wyrażenie na obwód koła wynosi 2πr.

Ogólnie rzecz biorąc: wyrażenia generują co najmniej jedną wartość.

W Pythonie wyrażenia są objęte szeroko w Python Reference języka w ogóle, wyrażeń w Pythonie składają się z kombinacji składniowo prawnej Atomów , prawybory i Operatorów .

Wyrażenia w języku Python z Wikipedii

Przykłady wyrażeń:

Literały i poprawne składniowo kombinacje z operatorami i funkcjami wbudowanymi lub wywołanie funkcji napisanych przez użytkownika:

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

Oświadczenie z Wikipedii:

W programowaniu komputerowym stwierdzenie może być uważane za najmniejszy samodzielny element imperatywnego języka programowania. Program składa się z sekwencji jednej lub więcej instrukcji. Instrukcja będzie miała wewnętrzne komponenty (np. Wyrażenia).

Instrukcje Python z Wikipedii

Ogólnie rzecz biorąc: stwierdzenia robią coś i często składają się z wyrażeń (lub innych stwierdzeń)

Odwołanie do języka Python obejmuje obszerne instrukcje proste i instrukcje złożone .

Jednak rozróżnienie „Stwierdzenia coś robią” i „wyrażenia dają wartość” rozróżnienie może być rozmyte:

  • Zrozumienia listy są uważane za „Wyrażenia”, ale mają zapętlone konstrukcje i dlatego też Zrób coś.
  • ifJest zwykle stwierdzenie, takie jak if x<0: x=0, ale można też wyrażenie warunkowe jak x=0 if x<0 else 1że są wyrażeniami. W innych językach, takich jak C, formularz ten nazywany jest takim operatoremx=x<0?0:1;
  • Możesz pisać własne wyrażenia, pisząc funkcję. def func(a): return a*ajest wyrażeniem, gdy jest używane, ale składa się z instrukcji, gdy jest zdefiniowane.
  • Zwracane wyrażenie Nonejest procedurą w Pythonie: def proc(): passsyntaktycznie można użyć proc()jako wyrażenie, ale prawdopodobnie jest to błąd ...
  • Python jest nieco bardziej rygorystyczny niż twierdzenie, że C dotyczy różnic między wyrażeniem a instrukcją. W języku C każde wyrażenie jest oświadczeniem prawnym. Możesz mieć func(x=2);Czy to wyrażenie lub oświadczenie? ( Odpowiedź: Wyrażenie używane jako instrukcja z efektem ubocznym ) . Instrukcja przypisania x=2wewnątrz wywołania funkcji func(x=2)w Pythonie ustawia nazwany argument ana 2 tylko w wywołaniu do funci jest bardziej ograniczona niż przykład C.

„Z mojego słownika” oznacza Twoją osobistą opinię lub słownik, który posiadasz, jak słownik Oxford? Dzięki
Talespin_Kit

1
@Talespin_Kit: ... Twoja osobista opinia lub słownik, który posiadasz, jak słownik Oxford? Dobre pytanie. Korzystałem z aplikacji Apple Dictionary na komputerze Mac opartej na New Oxford American Dictionary.
dawg

80

Chociaż nie jest to związane z Pythonem:

expressionWyznaczona wartość. A statementrobi coś.

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

3
Pamiętaj jednak, że we wszystkich językach oprócz naprawdę „czystych” wyrażeń można również „coś zrobić” (bardziej formalnie: wywołać efekt uboczny).

@delnan: Czy możesz podać przykład (ciekawy)? Nie jestem świadomy
user225312,

4
Podobnie somelist.append(123). Naprawdę większość wywołań funkcji.
Thomas K

13
y = x + 1 nie jest wyrażeniem, ale instrukcją. Wypróbuj eval („y = x + 1”), a wystąpi błąd.
Arglanir

3
y = x +1 to wyrażenie wyrażeniowe
Emmanuel Osimosu

13

Instrukcje reprezentują akcję lub polecenie, np. Instrukcje drukowania, instrukcje przypisania.

print 'hello', x = 1

Wyrażenie jest kombinacją zmiennych, operacji i wartości, które dają wartość wynikową.

5 * 5 # yields 25

Wreszcie, wyrażenia

print 5*5

8

Wyrażenie to coś, co można sprowadzić do wartości, na przykład "1+3"lub "foo = 1+3".

Łatwo jest sprawdzić:

print foo = 1+3

Jeśli to nie działa, jest to stwierdzenie, jeśli tak, to wyrażenie.

Innym stwierdzeniem może być:

class Foo(Bar): pass

ponieważ nie można go zredukować do wartości.


1
Jak pokazałby się twój pierwszy przykład, przypisanie nie jest wyrażeniem (nie do końca, to znaczy - a = b = exprjest dozwolone, jako szczególny przypadek) w Pythonie. W językach, które czerpią więcej inspiracji z C.

class Foo(bar):jest początkiem instrukcji, a nie pełnej instrukcji.
Sven Marnach,

1
foo = 1+3NIE jest wyrażeniem. Jest to stwierdzenie (a dokładniej zadanie). Ta część 1+3jest jednak wyrażeniem.
Pithikos,

2
Moje sformułowanie jest bardzo, bardzo precyzyjne: „Jeśli to nie działa, to jest stwierdzenie, jeśli tak, to wyrażenie”. Wykonaj to, a otrzymasz odpowiedź.
Flavius

8
  1. Wyrażenie to instrukcja, która zwraca wartość. Jeśli więc może pojawić się po prawej stronie przypisania lub jako parametr wywołania metody, jest to wyrażenie.
  2. Niektóre kody mogą być zarówno wyrażeniami, jak i instrukcjami, w zależności od kontekstu. Język może mieć sposób na rozróżnienie tych dwóch, gdy są one niejednoznaczne.

5

Wyrażenie jest czymś, a stwierdzenie coś robi.
Wyrażenie jest również wyrażeniem, ale musi mieć zwrot.

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

PS: Tłumacz zawsze drukuje wartości wszystkich wyrażeń.


moim zdaniem stwierdzenie jest wyrażeniem o wartości zerowej
Adalcar

3

KOMUNIKAT:

Instrukcja to czynność lub polecenie, które coś robi. Np .: If-Else, Loops..etc

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

WYRAŻENIE:

Wyrażenie to kombinacja wartości, operatorów i literałów, które coś dają.

val a: Int = 5 + 5 #yields 10

Jest to duplikat tej istniejącej odpowiedzi: stackoverflow.com/questions/4728073/... .
karel

1
Może jest duplikat, ale podziela moje poglądy na powyższe pytanie. Bez obrazy
Raja Shekar

1

Instrukcja zawiera słowo kluczowe.

Wyrażenie nie zawiera słowa kluczowego.

print "hello"to instrukcja, ponieważ printjest słowem kluczowym.

"hello" jest wyrażeniem, ale kompresja listy jest przeciwko temu.

Poniższe wyrażenie jest wyrażeniem i jest prawdziwe bez zrozumienia listy:

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

4
To silnie zależy od twojej definicji „słowa kluczowego”. x = 1jest doskonale w porządku, ale nie zawiera słów kluczowych.
Joost

Nie, np. isJest słowem kluczowym, ale x is yniekoniecznie jest stwierdzeniem (ogólnie jest to tylko wyrażenie).
benjimin

1

Wyrażenia:

  • Wyrażenia powstają przez połączenie objectsi operators.
  • Wyrażenie ma wartość, która ma typ.
  • Składnia prostego wyrażenia:<object><operator><object>

2.0 + 3jest wyrażeniem, które ocenia 5.0i ma floatz nim powiązany typ .

Sprawozdania

Instrukcje składają się z wyrażenia (wyrażeń). Może obejmować wiele linii.


1

Istnieje kilka instrukcji, które mogą zmienić stan naszego programu Python: tworzyć lub aktualizować zmienne, definiować funkcje itp.

Wyrażenia po prostu zwracają pewną wartość, nie mogą zmienić stanu globalnego ani stanu lokalnego w funkcji.

Ale teraz mamy :=, to kosmita!


-1

Python nazywa wyrażenia „wyrażeniami wyrażeń”, więc pytanie może nie jest w pełni sformułowane.

Instrukcja zawiera prawie wszystko, co możesz zrobić w Pythonie: obliczanie wartości, przypisywanie wartości, usuwanie zmiennej, drukowanie wartości, powrót z funkcji, zgłaszanie wyjątku itp. Pełna lista znajduje się tutaj: http: // docs.python.org/reference/simple_stmts.html#

Wyrażenie wyrażenie ogranicza się do wywoływania funkcji (np. Math.cos (theta) ”), operatorów (np.„ 2 + 3 ”) itp. W celu wygenerowania wartości.


10
Nie, Python nie nazywa wyrażeń „wyrażeniami wyrażeń”. Python wywołuje instrukcje składające się tylko z jednego wyrażenia „instrukcje wyrażeń”.
Sven Marnach,

... i nie tylko to robi.

-1

Myślę, że wyrażenie zawiera operatory + operandy i obiekt, który przechowuje wynik operacji ... np

var sum = a + b;

ale instrukcja jest po prostu linią kodu (może być wyrażeniem) lub blokiem kodu ... np

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

}

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.