В чем разница между ключевым словом или оператором и вызовом функции? - PullRequest
5 голосов
/ 19 мая 2011

Я думал об этом недавно, так как Python 3 меняет print с оператора на функцию.

Тем не менее, Ruby и CoffeeScript используют противоположный подход, поскольку вы часто исключаете скобки из функций, тем самым стирая различие между ключевыми словами / операторами и функциями. (Вызов функции без скобок очень похож на ключевое слово.)

Какова разница между ключевым словом и функцией? Мне кажется, что некоторые ключевые слова на самом деле просто функции. Например, return 3 можно также рассматривать как return(3), где функция возврата изначально реализована на языке. Или в JavaScript typeof - это ключевое слово, но оно очень похоже на функцию и может вызываться в скобках.

Мысли

Ответы [ 4 ]

4 голосов
/ 19 мая 2011

Функция выполняется внутри фрейма стека , тогда как оператор ключевого слова не обязательно.Хорошим примером является оператор return: если бы это была функция, которая выполнялась бы в своем собственном стеке, не было бы способа контролировать поток выполнения так, как это делается.

2 голосов
/ 19 мая 2011

Ключевые слова и функции неоднозначны. Необходимость или отсутствие скобок полностью зависит от структуры синтаксиса языка.

Рассмотрим целочисленное объявление, например:

int my_integer = 4;

против

my_integer = int(4)

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

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

1 голос
/ 19 мая 2011

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

Вы цитируете return в своем вопросе, который является хорошим примером: на всех языках, которые вы упомянули, нет способа использовать функцию, обеспечивающую то же поведение, что и return x.

0 голосов
/ 19 мая 2011

В 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...