Яка різниця між виразом і твердженням в 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 на відмінності між виразом і твердженням. У С будь-який вираз є юридичним твердженням. Ви можете мати func(x=2);Це вираз чи вислів? ( Відповідь: Вираз, що використовується як оператор із побічним ефектом. ) Заява про присвоєння x=2внутрішньої частини виклику функції func(x=2)в Python встановлює іменний аргумент aна 2 лише у виклику funcта є більш обмеженим, ніж приклад C.

"З мого словника" означає вашу особисту думку чи словник, яким ви володієте, як словник Оксфорда? Спасибі
Talespin_Kit

1
@Talespin_Kit: ... ваша особиста думка чи словник, яким ви володієте, як словник Оксфорда? Хороше питання. Я використовував додаток Apple Dictionary на Mac, який базується на американському словнику New Oxford.
dawg

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

3
Але зауважте, що в будь-якій мові, за винятком справді "чистих", вирази можуть "зробити щось" (формальніше: мати побічний ефект).

@delnan: Чи можете ви навести приклад (цікаво)? Я не знаю.
користувач225312

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. У мовах, що черпають більше натхнення від С, це так.

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/… .
karel

1
Можливо, це дублікат, але він поділяє мої погляди на питання вище. Без образи
Раджа

1

Заява містить ключове слово.

Вираз не містить ключового слова.

print "hello"є оператором, тому що printце ключове слово.

"hello" є виразом, але стиснення списку проти цього.

Далі йде вираз висловлювання, і це правда без розуміння списку:

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

4
Це сильно залежить від вашого визначення ключового слова. x = 1є ідеально виразним твердженням, але не містить ключових слів.
Joost

Ні, наприклад is, це ключове слово, але x is yце не обов'язково вислів (загалом це лише вираз).
benjimin

1

Вирази:

  • Вирази утворюються поєднанням objectsі operators.
  • Вираз має значення, яке має тип.
  • Синтаксис простого виразу:<object><operator><object>

2.0 + 3це вираз, який оцінює 5.0і має з ним тип float.

Заяви

Виписки складаються з виразів (ив). Він може охоплювати кілька ліній.


1

Є деякі заяви, які можуть змінити стан нашої програми Python: створити або оновити змінні, визначити функцію тощо.

І вирази просто повертають деяке значення, не можуть змінити глобальний стан або локальний стан у функції.

Але тепер ми дісталися :=, це іноземець!


-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

}

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.