В чем разница между ключевым словом или оператором и вызовом функции?

#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