簡體   English   中英

關鍵字或語句與函數調用之間有什么區別?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM