关键字或语句与函数调用之间有什么区别?

时间:2011-05-19 06:29:35

标签: python function keyword coffeescript

我最近在想这个,因为Python 3正在将print从一个语句改为一个函数。

然而,Ruby和CoffeeScript采用相反的方法,因为你经常从函数中省略括号,从而模糊了关键字/语句和函数之间的区别。 (没有括号的函数调用看起来很像关键字。)

一般来说,关键字和功能之间有什么区别?在我看来,一些关键字实际上只是功能。例如,return 3同样可以被认为是return(3),其中返回函数在语言中本地实现。或者在JavaScript中,typeof是一个关键字,但它看起来非常像一个函数,可以用括号调用。

思想?

4 个答案:

答案 0 :(得分:4)

函数在堆栈框架内执行,而关键字语句不一定。一个很好的例子是return语句:如果它是一个函数并且将在它自己的堆栈中执行,那么它将无法以它的方式控制执行流。

答案 1 :(得分:2)

关键字和功能含糊不清。括号是否必要完全取决于语言语法的设计。

考虑一个整数声明,例如:

int my_integer = 4;

VS

my_integer = int(4)

这两个示例在逻辑上是等效的,但因语言语法而异。

编程语言使用关键字来保留其有限数量的基本功能。当你编写一个函数时,你扩展一种语言。

答案 2 :(得分:1)

关键字是比功能更低级的构建块,并且可以执行功能不能的事情。

你在问题​​中引用了return,这是一个很好的例子:在你提到的所有语言中,没有办法使用函数来提供与return x相同的行为。

答案 3 :(得分:0)

在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