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

Изменение: предложенный дубликат, не отвечает на мой вопрос, так как меня в первую очередь касается различий в Python конкретно. Предлагаемый дубликат гораздо шире, чем этот вопрос.

Я недавно начал изучать Python. В настоящее время я читаю "Изучай Python трудный путь". У меня есть некоторый опыт специального программирования, но я вернусь к началу, чтобы изучить все с нуля на этот раз.

В книге один из первых уроков касается print, и автор дает различные инструкции по его использованию в Python 2.7, например:

print "This is fun."

Мне стало интересно, как технически называется print здесь с точки зрения программирования. Некоторые исследования обнаружили это, PEP-3105

В этом случае делается для того, чтобы сделать print функцией:

Печатное выражение давно появилось в списках сомнительного языка функции, которые должны быть удалены в Python 3000, такие как Guido Презентация "Python Regrets" 1. Таким образом, цель этого ПКП не нова, хотя это может стать предметом споров среди Python разработчиков.

Таким образом, print является оператором в Python 2.7 и функцией в Python 3.

Но я не смог найти четкого определения разницы между statement и function. Я нашел это также человеком, который изобрел Python, Гвидо ван Россумом, в котором он объясняет, почему было бы хорошо сделать print функцией вместо выражения.

Из того, что я прочитал, видно, что функция - это некоторый код, который принимает параметры и возвращает значение. Но разве print не делает это в Python 2.7? Разве это не принимает строки и возвращает объединенную строку?

В чем разница между оператором и функцией в Python?

Ответ 1

Инструкция - это синтаксическая конструкция. Функция - это объект. Существуют инструкции для создания функций, например def:

def Spam(): pass

Таким образом, операторы являются одним из способов указать Python, что вы хотите, чтобы он создал функцию. Кроме того, между ними действительно не так много связей.

Ответ 2

Заявление в Python - это любой кусок кода, который вы написали. Это скорее теоретическая концепция, чем реальная вещь. Если вы используете правильный синтаксис при написании кода, ваши операторы будут выполнены ("оценены"). Если вы используете неправильный синтаксис, ваш код выдаст ошибку. Большинство людей используют "высказывание" и "выражение" взаимозаменяемо.

Вероятно, самый простой способ увидеть разницу между оператором и функцией - это посмотреть несколько примеров операторов:

5 + 3 # This statement adds two numbers and returns the result
"hello " + "world" # This statement adds to strings and returns the result
my_var # This statement returns the value of a variable named my_var
first_name = "Kevin" # This statement assigns a value to a variable.
num_found += 1 # This statement increases the value of a variable called num_found
print("hello") # This is a statement that calls the print function
class User(BaseClass): # This statement begins a class definition
for player in players: # This statement begins a for-loop
def get_most_recent(language): # This statement begins a function definition
return total_count # This statement says that a function should return a value
import os # A statement that tells Python to look for and load a module named 'os'

# This statement calls a function but all arguments must also be valid expressions.
# In this case, one argument is a function that gets evaluated
mix_two_colors(get_my_favorite_color(), '#000000')

# The following statement spans multiple lines and creates a dictionary
my_profile = {
  'username': 'coolguy123' 
}

Вот пример недопустимого утверждения:

first+last = 'Billy Billson'
# Throws a Syntax error. Because the plus sign is not allowed to be part of a variable name.

В Python вы, как правило, размещаете каждый оператор в отдельной строке, за исключением случая с вложенными операторами. Но в других языках программирования, таких как C и Java, вы можете поместить столько строк в одну строку, сколько захотите, если они разделены двоеточием (;).

Как в Python2, так и в Python3 вы можете вызвать

print("this is a message") 

и он выведет строку в стандартный формат. Это потому, что у них обоих есть определенная функция print, которая принимает строковый аргумент и печатает его.

Python2 также позволил вам сделать оператор для печати в стандартном формате без вызова функции. Синтаксис этого утверждения состоял в том, что оно начиналось со слова "печать", а потом печаталось то, что последовало. В Python3 это больше не является действительным утверждением.

print "this is a message"