【问题标题】:What's the difference between a keyword or a statement, and a function call?关键字或语句与函数调用有什么区别?
【发布时间】:2011-08-28 14:53:55
【问题描述】:

我最近在考虑这个问题,因为 Python 3 正在将 print 从语句更改为函数。

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

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

想法?

【问题讨论】:

  • 是的,typeof 是一个函数,也是一个关键字。因此,您不能将变量命名为与现有关键字相同的名称。这是为了帮助消除编译器/解释器的歧义。

标签: python function keyword coffeescript


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    关键字是比函数低级的构建块,可以做函数不能做的事情。

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

    【讨论】:

    • “关键字”通常是指语言保留的字符序列,用作运算符(typeof)、语句部分(return)等。比较“关键字” " 和 "function" (这可能意味着语言中数学函数的任何表示)是没有意义的——关键字很可能是一个函数或它的一部分 (function)。
    【解决方案3】:

    关键字和功能不明确。是否需要括号完全取决于语言语法的设计。

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

    int my_integer = 4;
    

    my_integer = int(4)
    

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

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

    【讨论】:

      【解决方案4】:

      在 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
      

      【讨论】:

        猜你喜欢
        • 2014-05-26
        • 1970-01-01
        • 2016-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-18
        相关资源
        最近更新 更多