python语句和函数的区别_语句与函数的区别

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

语句是执行的东西;是语言实现理解的“做某事的指令”。e、 gprint "Hello World"

pass

def foo(n):

return n + 1

if condition:

print 'yay'

else:

print 'doh'

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

表达式是可以计算以产生值的值。e、 g1

"foo"

2 * 6

function(argument)

None

上面包含数字文本表达式、字符串文本表达式、包含数字运算符的表达式、函数调用表达式和文本无表达式。除了文字和变量,表达式由其他表达式组成。在function(argument)中,function和argument也是这两个表达式。

关键的区别在于,语句是指示语言实现“去做某事”的指令。表达式被计算为一个值(这可能需要语言实现在路上“做点什么”)。

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

语句永远不会出现在表达式中(我相信这在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)

看起来像一个语句(复合语句tement,就像if语句)。为了证明这一点,这完全没有意义(而且是一个解析错误):1 + for thing in collection:

do_stuff(thing)

不过,在某些语言中,for循环的等价物是表达式,并且有一个值,可以尝试向该值添加1。在某些情况下,它甚至是一个函数,而不是语言中的特殊语法。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值