Что такое выражение в Python?

У меня есть некоторое замешательство в отношении его значения или определения.

Разве это не какой-то код, который производит или вычисляет новые значения данных? (Говорит Зелле в своей книге)

Тогда мне интересно, является ли строковый тип данных выражением.

Если это так, то что делает eval() , когда его аргумент является строкой?

Книга Zelle говорит, что eval(<string>) оценивает string как выражение, что это означает, если string уже является выражением?

И если string не является выражением, то как это может произойти после print ?

  • Есть ли способ сделать больше работы после заявления возврата?
  • Как я могу отформатировать timedelta для отображения
  • Python 3 TypeError: должен быть str, а не байтами с sys.stdout.write ()
  • Как вызвать статический метод класса с использованием имени метода и имени класса
  • TypeError: ожидается, что объект буфера символов
  • Как определить класс в Python
  • Как закрыть программу с помощью python?
  • Как получить токен доступа пользователя в Python
  • 4 Solutions collect form web for “Что такое выражение в Python?”

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

    Все, что что-то делает, – это утверждение. Любое присваивание переменной или вызову функции является выражением. Любое значение, содержащееся в этом выражении в выражении.

    foo = "hello" – это оператор, который присваивает foo значению выражения "hello". Так как код "hello" является простым выражением, то есть он не содержит никаких операций, ничего не оценивается, поэтому foo просто присваивается "hello ». Более сложные выражения фактически оценивают вещи, например добавление чисел. Использование выражения слова кажется, что это делает вещи более запутанными. Выражения – это не что иное, как значения, за исключением того, что они могут иметь операции, такие как сложение или вычитание.

    eval оценивает строку так, как если бы это было выражение python. Eval делает выражение в качестве аргумента. Однако в этом нет ничего особенного, так как каждое отдельное значение является выражением . Говорить, что «eval принимает значение в качестве аргумента», говорит точно то же самое, но это звучит намного проще. : D

    eval( "2+2" ) передает строку "2+2" в функцию. Функция вычисляет выражение, содержащееся в строке, которое выводится до 4.

    Книга Zelle говорит, что eval(<string>) оценивает строку как выражение, что это означает, если строка уже является выражением?

    Любая строка является выражением, так как она представляет значение. Однако то, что находится в строке, абсолютно не влияет на то, что оно является выражением. Если это значение, то это выражение. Когда он «оценивается как выражение по eval», символы внутри строки выполняются так, как если бы они были выражением python.

    TL; DR: выражения – это комбинации значений и операторов и всегда оцениваются до одного значения. Заявление – это любая другая инструкция. Некоторые утверждения содержат выражения.

    Выражение представляет собой инструкцию, которая объединяет значения и операторы и всегда оценивает до одного значения .

    Например, это выражение:

     >>> 2 + 2 

    2s – целочисленные значения, а + – математический оператор. Это выражение оценивается до единственного целочисленного значения 4.

    Технически это также выражение:

     >>> 4 

    В качестве выражения он оценивается до единственного значения 4.

    Когда я говорю значения и операторы, это не ограничивается математическими проблемами:

     >>> 'You will be ' + str(int(myAge) + 1) + ' next year.' 

    Переменная myAge оценивает значение внутри нее. Вызов функции int('5') оценивает возвращаемое значение функции, 5 . Все эти строковые значения объединены с оператором + (в данном случае это оператор конкатенации строк). Независимо от того, насколько велико выражение, оно оценивается до одного значения: в этом случае строковое значение 'You will be 6 next year.'

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

     >>> spam = 2 + 2 

    Вот инструкция if:

     >>> if spam == 4: 

    Вот инструкция while для бесконечного цикла:

     >>> while True: 

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

     >>> break 

    string – это выражение. Выражение – это все, что имеет «значение». Как 3, «Hello world», 1 + 1, math.sqrt (9) и т. Д. Названия функций также являются выражениями.

    eval () дает вам значение выражения, которое вы даете ему в виде строки. Если вы скажете eval ('1 + 1'), он возвращает 2. Таким образом, он возвращает то же самое, что и при возврате, если вы просто напишите: 1 + 1.

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

    Атомы, с другой стороны, похоже, покрывают, поскольку @kynnysmatto говорит «все, что имеет« ценность ». Возможно, «все, что может быть заключено в скобки, а затем извне круглых скобок неотличимо от его соответствующего значения», может быть лучшим определением атома.

    Когда Целле обсуждает выражения в контексте eg eval (foo), я думаю, он подразумевает:

    • foo – это идентификатор, который является типом атома
    • но foo – идентификатор чего-то
    • это «что-то» похоже на строку, вероятно, на фактическую строку
    • внутри внутренних элементов eval () эта строка также представляет собой выражение «Python» Python, то есть что-то, что Python может анализировать и понимать.

    tl; dr: «выражение», поскольку терминологию лучше всего понимать с точки зрения разбора кода; когда вы программируете сами, вам может показаться лучше думать в терминах «атомов».

    Python - лучший язык программирования в мире.