В чем разница между выражением и утверждением в Python?

Ответы:

242

Выражения содержат только идентификаторы , литералы и оператор , когда операторы включают арифметические и логические оператор, функции оператор вызова подписки оператор и подобный, и могут быть сведены к какому - то «ценности», который может быть любым объектом Python. Примеры:() []

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

Заявления (см. 1 ,2 ), с другой стороны, это все, что может составить строку (или несколько строк) кода Python. Обратите внимание, что выражения также являются утверждениями. Примеры:

# all the above expressions
print 42
if x: do_y()
return
a = 7
Свен Марнах
источник
17
выражения часть заявлений
bismigalis
59
@bismigalis: Каждое допустимое выражение Python может использоваться как выражение (называемое «выражение выражения» ). В этом смысле выражения являются заявлениями.
Свен Марнач
2
Выражения также могут включать вызовы функций (включая вызовы классов для создания объектов). Технически это «идентификаторы», точно такие же, как имена, связанные со значениями в операторе = ... даже если привязка осуществляется через ключевые слова «def» или «class». Однако для этого ответа я бы отдельно разъяснил вызовы функций, чтобы прояснить это.
Джим Деннис
2
@ Джордж достаточно справедливо. :) Выражения выражений весьма полезны даже вне REPL - довольно часто в качестве выражений выражений используются выражения вызова функций, например, print("Hello world!")или my_list.append(42).
Свен Марнах
3
@WillTaylor Все, что приводит к значению, является выражением, то есть всем, что вы могли бы написать на стороне записи присваивания. Так a = yield 7как действительно, yield 7является выражением. Давным-давно yieldбыл представлен как утверждение, но оно было обобщено до выражения в PEP 342 .
Свен Марнах
120

Выражение - из Нового Оксфордского американского словаря :

выражение: математика набор символов, которые совместно выражают количество: выражение для окружности круга 2πr.

В общих чертах: выражения дают как минимум одно значение.

В Python выражения подробно рассматриваются в Справочнике по языку Python. В общем, выражения в Python состоят из синтаксически допустимой комбинации атомов , основных цветов и операторов .

Выражения Python из Википедии

Примеры выражений:

Литералы и синтаксически правильные комбинации с операторами и встроенными функциями или вызов пользовательских функций:

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

Заявление из Википедии:

В компьютерном программировании оператор может считаться наименьшим отдельным элементом императивного языка программирования. Программа состоит из последовательности одного или нескольких операторов. Оператор будет иметь внутренние компоненты (например, выражения).

Заявления Python из Википедии

В общих чертах: заявления делают что-то и часто состоят из выражений (или других утверждений)

Справочник по языку Python широко охватывает простые и составные выражения .

Однако различие между «заявлениями делать что-то» и «выражениями порождает ценность» может стать размытым:

  • Понимания списков считаются «выражениями», но они имеют циклические конструкции и поэтому также делают что-то.
  • if, Как правило , заявление, например, if x<0: x=0но вы также можете иметь условное выражение , как , x=0 if x<0 else 1которые являются выражениями. В других языках, таких как C, эта форма называется оператором, подобным этомуx=x<0?0:1;
  • Вы можете написать свои собственные выражения, написав функцию. def func(a): return a*aявляется выражением, когда оно используется, но состоит из операторов, когда оно определено.
  • Возвращаемое выражение None- это процедура в Python: def proc(): passсинтаксически вы можете использовать proc()как выражение, но это, вероятно, ошибка ...
  • Python немного более строг, чем, скажем, C относительно различий между Expression и Statement. В C любое выражение является юридическим утверждением. Вы можете иметь func(x=2);Это выражение или утверждение? ( Ответ: выражение используется в качестве оператора с побочным эффектом. ) Оператор присваивания x=2внутри вызова функции func(x=2)в Python устанавливает для именованного аргумента aзначение 2 только в вызове funcи является более ограниченным, чем пример на языке C.
Dawg
источник
«Из моего словаря» означает ваше личное мнение или словарь, которым вы владеете, как Оксфордский словарь? Спасибо
Talespin_Kit
1
@Talespin_Kit: ... ваше личное мнение или словарь, которым вы владеете, как Оксфордский словарь? Хороший вопрос. Я использовал приложение Apple Dictionary на Mac, которое основано на Новом Оксфордском американском словаре.
до
80

Хотя это не связано с Python:

А expressionоценивает значение. А statementчто-то делает.

>>> x + 2         # an expression
>>> x = 1         # a statement 
>>> y = x + 1     # a statement
>>> print y       # a statement (in 2.x)
2
user225312
источник
3
Но обратите внимание, что во всех языках, кроме действительно действительно «чистых», выражения могут «делать что-то» (более формально: иметь побочный эффект) так же хорошо.
@delnan: Можете ли вы привести пример (любопытно)? Я не в курсе.
user225312
4
Точно так же somelist.append(123). На самом деле большинство вызовов функций.
Томас К
13
y = x + 1 не выражение, а утверждение. Попробуйте eval ("y = x + 1"), и у вас будет ошибка.
Аргланир
3
y = x +1 - это выражение выражения
Эммануэль Осимосу
13

Операторы представляют действие или команду, например операторы печати, операторы присваивания.

print 'hello', x = 1

Выражение - это комбинация переменных, операций и значений, которая дает значение результата.

5 * 5 # yields 25

Наконец, выражения выражения

print 5*5
Эммануэль Осимосу
источник
8

Выражение - это то, что может быть уменьшено до значения, например "1+3"или "foo = 1+3".

Это легко проверить:

print foo = 1+3

Если это не работает, это утверждение, если это работает, это выражение.

Другое утверждение может быть:

class Foo(Bar): pass

поскольку это не может быть уменьшено до значения.

Флавий
источник
1
Как показал бы ваш первый пример, присваивание не является выражением (не совсем, то есть - a = b = exprразрешено, как особый случай) в Python. На языках, черпающих больше вдохновения из C, это так.
class Foo(bar):это начало утверждения, а не полное утверждение.
Свен Марнах
1
foo = 1+3это не выражение. Это утверждение (точнее, задание). Часть 1+3является выражением, хотя.
Питикос
2
Моя формулировка очень, очень точная: «Если это не работает, это утверждение, если оно работает, это выражение». Выполните его, и вы получите ответ.
Флавий
8
  1. Выражение - это оператор, который возвращает значение. Поэтому, если оно может появиться в правой части присваивания или в качестве параметра для вызова метода, это выражение.
  2. Некоторый код может быть как выражением, так и утверждением, в зависимости от контекста. Язык может иметь возможность различать два, когда они неоднозначны.
Стивен Спунгин
источник
5

Выражение - это что-то, а утверждение - что-то.
Выражение также является оператором, но оно должно иметь возврат.

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

PS: интерпретатор всегда печатает значения всех выражений.

дональд цзян
источник
по моему мнению, выражение - это выражение с нулевым значением
Adalcar
3

ЗАЯВЛЕНИЕ:

Оператор - это действие или команда, которая что-то делает. Пример: If-Else, Loops..etc

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

ЭКСПРЕССИЯ:

Выражение - это комбинация значений, операторов и литералов, которая что-то дает.

val a: Int = 5 + 5 #yields 10
Раджа Шекар
источник
Это дубликат этого существующего ответа: stackoverflow.com/questions/4728073/… .
Карел
1
Может быть, это дубликат, но он разделяет мои взгляды на вопрос выше. Без обид
Раджа Шекар
1

Заявление содержит ключевое слово.

Выражение не содержит ключевое слово.

print "hello"это утверждение, потому что printэто ключевое слово.

"hello" является выражением, но сжатие списка против этого.

Следующее является выражением выражения, и это верно без понимания списка:

(x*2 for x in range(10))
abifromkerala
источник
4
Это сильно зависит от вашего определения «ключевого слова». x = 1это очень хорошее утверждение, но не содержит ключевых слов.
Joost
Нет, например is, это ключевое слово, но x is yэто не обязательно утверждение (в общем, это просто выражение).
Бенджимин
1

Выражения:

  • Выражения формируются путем объединения objectsи operators.
  • Выражение имеет значение, которое имеет тип.
  • Синтаксис для простого выражения:<object><operator><object>

2.0 + 3является выражением, которое оценивает 5.0и имеет floatсвязанный с ним тип .

Заявления

Заявления состоят из выражения (й). Он может занимать несколько строк.

ssokhey
источник
1

Есть несколько операторов, которые могут изменить состояние нашей программы на Python: создавать или обновлять переменные, определять функции и т. Д.

И выражения, просто возвращающие какое-то значение, не могут изменить глобальное состояние или локальное состояние в функции.

Но теперь мы получили :=, это инопланетянин!

roachsinai
источник
-1

Python называет выражения «операторы выражений», поэтому вопрос, возможно, не полностью сформирован.

Оператор состоит из практически всего, что вы можете сделать в Python: вычисление значения, присвоение значения, удаление переменной, печать значения, возврат из функции, создание исключения и т. Д. Полный список приведен здесь: http: // docs.python.org/reference/simple_stmts.html#

Оператор выражения ограничивается вызовом функций (например, math.cos (theta) "), операторов (например," 2 + 3 ") и т. Д. Для получения значения.

Вальтер Ниссен
источник
10
Нет, Python не называет выражения «операторы выражений». Python называет операторы только состоящими из одного выражения «операторы выражения».
Свен Марнач
... и это не одиноко.
-1

Я думаю, что выражение содержит операторы + операнды и объект, который содержит результат операции ... например

var sum = a + b;

но оператор - это просто строка кода (это может быть выражение) или блок кода ... например

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

}

Рашид Икбал
источник