[英]What's the difference between a keyword or a statement, and a function call?
我最近在想這個,因為Python 3正在將print
從一個語句改為一個函數。
但是,Ruby和CoffeeScript采用相反的方法,因為你經常從函數中省略括號,從而模糊了關鍵字/語句和函數之間的區別。 (沒有括號的函數調用看起來很像關鍵字。)
一般來說,關鍵字和函數之間有什么區別? 在我看來,一些關鍵字實際上只是功能。 例如, return 3
同樣可以被認為是return(3)
,其中返回函數在語言中本地實現。 或者在JavaScript中, typeof
是一個關鍵字,但它看起來非常像一個函數,可以用括號調用。
思考?
函數在堆棧幀內執行 ,而關鍵字語句不是必需的。 一個很好的例子是return
語句:如果它是一個函數並且將在它自己的堆棧中執行,那么就無法以它的方式控制執行流程。
關鍵詞和功能含糊不清。 括號是否必要完全取決於語言語法的設計。
考慮一個整數聲明,例如:
int my_integer = 4;
VS
my_integer = int(4)
這兩個示例在邏輯上是等效的,但因語言語法而異。
編程語言使用關鍵字來保留其有限數量的基本功能。 編寫函數時,您正在擴展一種語言。
關鍵字是比功能更低級的構建塊,並且可以做功能不能的事情。
你在問題中引用了return
,這是一個很好的例子:在你提到的所有語言中,沒有辦法使用函數來提供與return x
相同的行為。
在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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.