我最近在想这个,因为Python 3正在将print
从一个语句改为一个函数。
然而,Ruby和CoffeeScript采用相反的方法,因为你经常从函数中省略括号,从而模糊了关键字/语句和函数之间的区别。 (没有括号的函数调用看起来很像关键字。)
一般来说,关键字和功能之间有什么区别?在我看来,一些关键字实际上只是功能。例如,return 3
同样可以被认为是return(3)
,其中返回函数在语言中本地实现。或者在JavaScript中,typeof
是一个关键字,但它看起来非常像一个函数,可以用括号调用。
思想?
答案 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