语句和功能之间的区别

时间:2012-02-16 07:38:12

标签: javascript python ruby

快到午夜了,我脑子里只有一个问题是" for loop"声明或功能。

我一直认为这是一个声明,但我做了谷歌搜索它是一个功能,确实有结果。那是什么?在那种情况下,函数和语句之间有什么区别?

3 个答案:

答案 0 :(得分:19)

for循环通常不是函数,它是一种称为流控制结构的特殊语句。

statement是一个命令。它做了一些事情。在大多数语言中,语句不返回值。例如:

print "Hello World"

function是一个子程序,可以在程序的其他地方调用。函数通常(但不一定)返回值。例如:

function(a) { return a * 2 }

control structure,也称为复合语句,是一种用于指示执行流程的语句。例子:

if (condition) then { branch_1 } else { branch_2 }
for (i = 0; i < 10; i += 1) { ... }

另外值得注意的是,expression是一段评估值的代码。例如:

2 + 2

所有示例都是伪代码,不依赖于任何特定语言。另请注意,这些不是独家类别,它们可以重叠。

答案 1 :(得分:8)

在您选择的三种语言标签中,我只是非常熟悉Python,但我相信很多其他语言对这些概念有相似的看法。这里的所有示例代码都是Python。

语句是执行的事情;语言实现理解的“做某事的指示”。 e.g。

print "Hello World"

pass

def foo(n):
    return n + 1

if condition:
    print 'yay'
else:
    print 'doh'

上面的块包含print语句,pass语句,函数定义语句和if / else语句。注意,函数定义和if / else语句是复合语句;它们包含其他语句(可能包含其中许多语句,也可能包含其他复合语句)。

可以对表达式进行评估以生成值。 e.g。

1

"foo"

2 * 6

function(argument)

None

上面包含一个数字文字表达式,一个字符串文字表达式,一个涉及数字运算符的表达式,一个函数调用表达式和文字无表达式。除了文字和变量之外,表达式由其他表达式组成。在function(argument)中,functionargument也都是表达式。

关键的区别在于语句是指示语言实现“去做某事”的指令。表达式被评估为一个值(可能需要语言实现以便在路上“做某事”)。

这样做的结果是,无论你在哪里看到一个值(包括一个表达式),你都可以替换任何其他表达式,你仍然会得到某种有意义的东西。它可能无法编译,或者在运行时抛出异常,或者其他什么,但至少在某种程度上你可以理解发生了什么。

语句可以从不出现在表达式中(我相信在某些意义上在Ruby和Javascript中不是这样,因为它们允许使用文字代码块和函数,然后将其用作值作为整个,函数和代码块包含语句;但这与我所说的有些不同)。表达式必须有一个值(即使它是一个像None这样无趣的表达式)。声明是一个命令;它作为表达式的一部分出现是没有意义的,因为它没有价值。

许多语言也允许将表达式用作语句。这通常的意思是“评估这个表达式以得到一个值,然后扔掉它”。在Python中,通常以这种方式使用始终返回None的函数:

write_to_disk(result)

它被用作“命令”,所以它看起来像一个语句,但从技术上讲它是一个表达式,我们只是不使用它为任何事情评估的值。你可以说一个“裸表达式”是语言中可能的语句之一(并且它们经常以这种方式解析)。

有些语言虽然区分了必须使用的函数,比如没有返回值的语句(通常称为过程)和像表达式一样使用的函数,并且使用像语句这样的函数给出错误或警告,并且肯定给出了使用过程作为表达式时出错。

所以,如果foo是一个表达式,我可以编写1 + foo,虽然它可能会导致类型错误,但它至少有意义。如果foo是一个语句,那么1 + foo通常是一个解析错误;语言实现甚至无法理解你想说的内容。


另一方面,功能是您可以调用的内容。它本身并不是表达式或声明。在Python中,使用def语句创建函数,函数调用是表达式。创建函数后绑定到函数的名称也是表达式。但是函数本身是一个,当你获得技术时它不是一个表达式,但肯定不是一个声明。


所以,对于循环。这是Python中的for循环:

for thing in collection:
    do_stuff(thing)

看起来像一个语句(一个复合语句,就像一个if语句)。为了证明这一点,这完全没有意义(并且是一个解析错误):

1 + for thing in collection:
    do_stuff(thing)

在某些语言中,相当于for循环一个表达式,并且有一个值,您可以尝试添加1.在某些语言中它甚至是一个函数,而不是特殊语法烘焙进入语言。

答案 2 :(得分:1)

此答案与 Python 2.7.2 相关。取自python tutorial

4.更多控制流程工具

<强> 4.2。声明: Python中的for语句与您在C或Pascal中使用的语句略有不同。而不是总是迭代数字的算术级数(如在Pascal中),或者让用户能够定义迭代步骤和暂停条件(如C),Python的for语句迭代任何序列的项目(列表或一个字符串),按照它们出现在序列中的顺序。“