#python #function #keyword #coffeescript
#python #функция #ключевое слово #coffeescript
Вопрос:
Я думал об этом недавно, поскольку Python 3 меняется print
с оператора на функцию.
Однако Ruby и CoffeeScript придерживаются противоположного подхода, поскольку вы часто опускаете скобки в функциях, тем самым стирая различие между ключевыми словами / операторами и функциями. (Вызов функции без круглых скобок очень похож на ключевое слово.)
В общем, в чем разница между ключевым словом и функцией? Мне кажется, что некоторые ключевые слова на самом деле являются просто функциями. Например, return 3
в равной степени можно рассматривать как то, return(3)
где возвращаемая функция реализована изначально в языке. Или в JavaScript typeof
— это ключевое слово, но оно очень похоже на функцию и может вызываться в круглых скобках.
Мысли?
Комментарии:
1. Да,
typeof
это функция и это ключевое слово. Итак, вы не можете называть свои переменные так же, как существующие ключевые слова. Это помогает устранить двусмысленность для компилятора / интерпретатора.
Ответ №1:
Функция выполняется во фрейме стека, тогда как оператор ключевого слова не обязательно. Хорошим примером является return
оператор: если бы это была функция и выполнялась бы в своем собственном стеке, она не смогла бы управлять потоком выполнения так, как это делает.
Ответ №2:
Ключевые слова и функции неоднозначны. Необходимость использования круглых скобок полностью зависит от конструкции синтаксиса языка.
Рассмотрим, например, объявление целого числа:
int my_integer = 4;
против
my_integer = int(4)
Оба этих примера логически эквивалентны, но различаются синтаксисом языка.
Языки программирования используют ключевые слова для резервирования конечного числа базовых функций. Когда вы пишете функцию, вы расширяете язык.
Ответ №3:
Ключевые слова являются строительными блоками более низкого уровня, чем функции, и могут делать то, чего не могут функции.
Вы приводите return
в своем вопросе хороший пример: во всех упомянутых вами языках нет способа использовать функцию для обеспечения того же поведения, что и return x
.
Комментарии:
1. «Ключевое слово» обычно относится к последовательности символов, которая зарезервирована языком для использования в качестве оператора (
typeof
), части оператора (return
) и т.д. Сравнивать «ключевое слово» с «функцией» (что может означать любое представление математической функции в языке) бессмысленно — ключевое слово вполне может быть функцией или ее частью (function
).
Ответ №4:
В Python круглые скобки используются для вызовов функций, создания кортежей или просто для определения приоритета.
a = (1) #same as a =1
a = (1,) #tuple with one element
print a #prints the value of a
print(a) #same thing, as (a) == a
def foo(x):
return x 1
foo(10) #function call, one element
foo(10,) #function call, also one element
foo 10 #not allowed!
foo(10)*2 #11 times 2 = 22
def foo2(y):
return (y*2)*2 #Not a function call. Same thing as y*4
Кроме того, ключевым словам нельзя присваивать значения.
def foo(x):
return x**2
foo = 1234 #foo with new value
return = 10 #invalid!
PS: Другое применение круглых скобок — генераторы. Точно так же, как понимание списка, но они не оцениваются после создания.
(x**2 for x in range(10))
sum(x 1 for x in [1,2,3]) #Parenthesis used in function call are 'shared' with generator