использование print () с составными операторами в python - PullRequest
2 голосов
/ 25 февраля 2011

Следующий код не работает в python

x = 11
print(x += 5)

пока этот код делает

x = 11
x += 5
print(x)

почему это?

Ответы [ 3 ]

8 голосов
/ 25 февраля 2011

x + = 5 - это утверждение, а не выражение. Вы можете использовать выражения только в качестве аргументов в вызовах функций.

Я предполагаю, что вы привыкли к C-подобному языку, где x + = 5 - выражение, но в Python - нет.

8 голосов
/ 25 февраля 2011

Проблема связана с различием между оператором и выражением. Этот вопрос имеет превосходный ответ, который объясняет разницу , ключевой момент:

Выражение: Что-то, что оценивает значение. Пример: 1 + 2 / x

Заявление: Строка кода, которая что-то делает. Пример: GOTO 100

Оператору print необходимо значение для распечатки. Таким образом, в скобках вы помещаете выражение, которое дает значение для печати. Так что это может быть что-то простое, например x, или более сложное выражение, например "The value is %d" % x.

x += 5 - это оператор, который добавляет 5 к x, но он не возвращает значение для print.

Так что в Python нельзя сказать

print(x += 5)

больше, чем вы могли бы сказать:

y = x += 5

Однако в некоторых других языках операторы также являются выражениями, т. Е. Они что-то делают и возвращают значение. Например, это вы можете сделать это в Perl:

$x = 5;
$y = $x += 5;
print $y;

Хотели бы вы сделать это - другой вопрос.

Одним из преимуществ обеспечения различия между утверждениями и выражениями в Python является то, что вы избегаете распространенных ошибок, когда вместо чего-то вроде:

if (myvar == 1) {
    //do things
}

у вас есть следующее по ошибке:

if (myvar = 1) {
    //do things
}

Во втором случае C установит myvar в 1, но Python завершится неудачно с ошибкой компиляции, потому что у вас есть оператор, в котором должно быть выражение.

1 голос
/ 25 февраля 2011

В Python вызовы функций принимают только выражения, а не операторы.

Все, что равно "равно", является оператором.

Это та же причина, по которой вы не можете сделать:

if x += 5:
    print x

См. Справочник по языку Python ( 3.2 версия , 2.7 версия ) для получения полной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...