В чем разница между выражениями и операторами в Python?
В чем разница между выражением и утверждением в Python?
Ответы (15)
Выражения содержат только идентификаторы, литералы и операторы , где операторы включают арифметические и логические операторы, функция вызывает оператор ()
оператор подписки []
и тому подобное, и может быть уменьшено до некоторого «значения», которым может быть любой объект 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
if condition: do_y()
- это оператор, но тернарный оператор x if condition else y
- это выражение (условное выражение)
- person nonybrighto; 25.09.2018
expression_stmt ::= expression_list
, я не думаю, что это одно и то же - просто использовать их как взаимозаменяемые. Я имею в виду, что я понимаю, откуда вы, но приведенное выше правило EBNF в значительной степени производит все, что вы можете иметь в правой части assignment statement
. Вне REPL вы не смогли бы написать полезную программу, просто используя выражения (значения). Вы должны сохранять ссылки на них, передавать их и т. Д. Все это утверждения, где утверждение - это просто другое слово для объявления b >.
- person Marius Mucenicu; 27.05.2019
expression statements
. Они особенно полезны при использовании REPL и не очень полезны снаружи, поскольку вы хотите использовать операторы simple
или compound
при построении программ, которые будут загружены на Python позже.
- person Marius Mucenicu; 28.05.2019
print("Hello world!")
или my_list.append(42)
.
- person Sven Marnach; 28.05.2019
None
, и это также то, что возвращает print()
(по крайней мере, в Python 3). Попробуйте, например, print(print())
или a = print()
, чтобы увидеть, что вызов print()
действительно является выражением.
- person Sven Marnach; 20.07.2019
yield 7
не является утверждением, поскольку оно не состоит только из идентификаторов, литералов и операторов?
- person Will Taylor; 22.08.2019
a = yield 7
допустимо, yield 7
является выражением. Давным-давно yield
был представлен как оператор, но он был обобщен до выражения в PEP 342.
- person Sven Marnach; 22.08.2019
Выражение - из New Oxford American Dictionary:
выражение: Математика набор символов, которые вместе выражают количество: выражение для длины окружности равно 2πr.
В общих чертах: Выражения дают по крайней мере одно значение.
В Python выражения подробно описаны в справочнике по языку Python. Как правило, выражения в Python состоит из синтаксически допустимой комбинации атомов, Primary и Операторы.
Примеры выражений:
Литералы и синтаксически правильные комбинации с Операторы и встроенные функции или вызов пользовательских функций:
>>> 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 охватывает простые утверждения и Составные операторы.
Однако различие между фразами «Утверждения что-то делают» и «выражения производят ценность» может стать нечетким:
- Составления списков считаются «выражениями», но они имеют циклические конструкции и, следовательно, также Сделай что-нибудь.
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);
Это выражение или утверждение? (Ответ: выражение используется как оператор с побочным эффектом.) Оператор присваивания ofx=2
внутри вызова функцииfunc(x=2)
в Python устанавливает для именованного аргументаa
значение 2 только при вызовеfunc
и более ограничено, чем пример C.
Хотя это не связано с Python:
expression
оценивает значение. statement
что-то делает.
>>> x + 2 # an expression
>>> x = 1 # a statement
>>> y = x + 1 # a statement
>>> print y # a statement (in 2.x)
2
sys.stdout.write('see?\n')
(проще в 3.x, где print - это функция и поэтому может быть вызвана как часть выражения). Если, конечно, у вас нет особого определения «что-то делать».
- person ; 18.01.2011
somelist.append(123)
. На самом деле, большинство вызовов функций.
- person Thomas K; 18.01.2011
statement
что-то делает. Итак, что делает пустой оператор?
- person Pacerier; 22.10.2013
Операторы представляют собой действие или команду, например операторы печати, операторы присваивания.
print 'hello', x = 1
Выражение - это комбинация переменных, операций и значений, которая дает значение результата.
5 * 5 # yields 25
Наконец, выражения-выражения
print 5*5
Выражение - это то, что может быть уменьшено до значения, например "1+3"
- это выражение, а "foo = 1+3"
- нет.
Проверить легко:
print(foo = 1+3)
Если не работает, то это утверждение, если работает, то выражение.
Другое утверждение может быть таким:
class Foo(Bar): pass
поскольку его нельзя свести к значению.
a = b = expr
разрешено, как особый случай) в Python. В языках, черпающих больше вдохновения из C, это так.
- person ; 18.01.2011
class Foo(bar):
- это начало утверждения, а не полное утверждение.
- person Sven Marnach; 18.01.2011
foo = 1+3
НЕ является выражением. Это заявление (если быть точным, задание). Однако часть 1+3
- это выражение.
- person Pithikos; 17.04.2015
- Выражение - это инструкция, возвращающая значение. Итак, если он может отображаться справа от присваивания или в качестве параметра вызова метода, это выражение.
- Некоторый код может быть как выражением, так и оператором, в зависимости от контекста. В языке могут быть средства различения между ними, когда они неоднозначны.
Выражение - это что-то, а утверждение что-то делает.
Выражение также является утверждением, но оно должно иметь возврат.
>>> 2 * 2 #expression
>>> print(2 * 2) #statement
PS: Интерпретатор всегда выводит значения всех выражений.
ЗАЯВЛЕНИЕ:
Заявление - это действие или команда, которые что-то делают. Пример: If-Else, Loops ... и т. Д.
val a: Int = 5
If(a>5) print("Hey!") else print("Hi!")
ВЫРАЖЕНИЕ:
Выражение - это комбинация значений, операторов и литералов, которая что-то дает.
val a: Int = 5 + 5 #yields 10
Выражения всегда дают значение, а утверждения - нет.
e.g.
объявление и присвоение переменных являются операторами, потому что они не возвращают значение
const list = [1,2,3];
Здесь у нас есть два операнда - переменная «сумма» слева и выражение справа. Все это утверждение, но бит справа - это выражение, поскольку этот фрагмент кода возвращает значение.
const sum = list.reduce((a, b)=> a+ b, 0);
Вызов функций, арифметические и логические операции - хорошие примеры выражений.
Выражения часто являются частью утверждения.
Различие между ними часто требуется, чтобы указать, требуется ли нам кусок кода для возврата значения.
Выражения:
- Выражения образуются путем объединения
objects
иoperators
. - Выражение имеет значение, имеющее тип.
- Синтаксис простого выражения:
<object><operator><object>
2.0 + 3
- это выражение, которое оценивается как 5.0
и имеет связанный с ним тип float
.
Заявления
Заявления состоят из выражений. Он может охватывать несколько строк.
Предыдущие операторы могли изменить состояние нашей программы Python: создавать или обновлять переменные, определять функцию и т. Д.
А выражения просто возвращают какое-то значение, не могут изменить глобальное или локальное состояние функции.
Но теперь у нас есть :=
, это инопланетянин!
Заявление содержит ключевое слово.
Выражение не содержит ключевого слова.
print "hello"
- это инструкция, потому что print
- ключевое слово.
"hello"
- это выражение, но сжатие списка противоречит этому.
Следующее является выражением выражения, и оно истинно без понимания списка:
(x*2 for x in range(10))
x = 1
- прекрасное выражение, но оно не содержит ключевых слов.
- person Joost; 09.05.2014
is
- ключевое слово, но x is y
не обязательно является утверждением (как правило, это просто выражение).
- person benjimin; 13.02.2020
Выражение - это комбинация значений, переменных и операторов. Само по себе значение считается выражением, как и переменная, поэтому следующие выражения являются допустимыми:
>>> 42
42
>>> n
17
>>> n + 25
42
Когда вы вводите выражение в командной строке, интерпретатор оценивает его, что означает, что он находит значение выражения. В этом примере n имеет значение 17, а n + 25 имеет значение 42.
Оператор - это блок кода, который имеет эффект, например создание переменной или отображение значения.
>>> n = 17
>>> print(n)
Первая строка - это оператор присваивания, который дает значение n. Вторая строка - это оператор печати, который отображает значение n. Когда вы набираете инструкцию, интерпретатор выполняет ее, что означает, что он делает то, что говорит инструкция. Как правило, утверждения не имеют ценности.
Это может быть полезно - thinkpython2 от Аллена Б. Дауни
Выражение преобразуется в значение.
Оператор использует значение * для получения результата **.
* Это включает пустое значение, например: print()
или pop()
.
** Этим результатом может быть любое действие, которое что-то меняет; например изменяет память (x = 1) или что-то меняет на экране (print (x)).
Несколько примечаний:
- Поскольку оператор может возвращать результат, он может быть частью выражения.
- Выражение может быть частью другого выражения.
Python называет выражения «выражениями-операторами», поэтому вопрос, возможно, не полностью сформирован.
Оператор состоит из почти всего, что вы можете делать в Python: вычисления значения, присвоения значения, удаления переменной, печати значения, возврата из функции, создания исключения и т. Д. Полный список находится здесь: http://docs.python.org/reference/simple_stmts.html#
Оператор выражения ограничен вызовом функций (например, math.cos (theta) "), операторов (например," 2 + 3 ") и т. Д. Для получения значения.
a = 42
правая часть 42
является выражением, но это не оператор выражения. В качестве оператора можно использовать любое выражение, но не каждое выражение на самом деле используется в качестве оператора.
- person Sven Marnach; 03.05.2021
__init__
и __new__
. Просто хочу спросить, существует ли такой термин, как конструктор, в языке Python. Я видел, что в документации он где-то используется, но я не видел, где этот термин явно определен. Является ли конструктор частью языка Python? __init__
и __new__
как-то вместе из конструктора? Вы, как педантичный парень, хотелось бы узнать ваше мнение по этому поводу. Также спасибо за разъяснения.
- person Niraj Raut; 04.05.2021
__new__()
- это конструктор, поскольку он возвращает новый экземпляр класса, а __init__()
- это функция инициализатора. Однако большинство людей вызывают __init__()
конструктор, поскольку он используется гораздо чаще, а инициализация поля выполняется в конструкторе на многих других языках. Я не думаю, что есть официальное определение конструктора в Python.
- person Sven Marnach; 04.05.2021
__new__()
, а затем вызывает __init__()
для возвращаемого значения __new__()
. Ни один из этих двух специальных методов в документации не называется конструктором.
- person Sven Marnach; 05.05.2021
MyClass(*args)
выражения конструктора. Аргументы сначала передаются __new__()
, затем __init__()
.
- person Sven Marnach; 07.05.2021
__new__()
конструктор объекта? Поскольку выражение конструктора формы MyClass(*args)
сначала передает аргументы __new__()
.
- person Niraj Raut; 07.05.2021
__new__()
и __init__()
явно.
- person Sven Marnach; 07.05.2021