python表达式和语句的区别_表达式和语句之间有什么区别?

表达式和语句的定义 – 即使存在一个或另一个这样的东西 – 特定于特定语言和描述它的语法.

好吧,我们走吧:

>语句是一些“可评估的代码”1,它不出现在表达式上下文中;和

>表达式是出现在上下文中的代码,其中可以通过替换表达式来消耗结果值.

{一个非常宽松的’定义’,但没有一种语言.虽然有些语言严格禁止副作用何时可以发生和不发生 – 而且没有结果或副作用的代码是无用的 – 我不相信讨论这些是差异的基础.}

例如,让我们看看C中的printf.这是一个侧面效应and it returns a value的功能;通常会忽略返回值.因此printf既可以作为声明出现

printf("Hello world!");

和一个表达

if (8 == printf("Hello %s!", name)) { // ..

(返回类型为void的函数调用只能出现在C语句中,但这是由类型系统而不是解析器强加的.)

同样,在JavaScript x = 1中取这两行;和x =(y = 2); x = ..是一个语句,而y = 2是一个产生值的表达式.

在这两个例子中,我们看到语法生成决定了它是被视为语句还是表达式.

相比之下,Ruby可以将“顶级”赋值视为表达式:

[1].map {|x| x = 2}

现在让我们来看看Python(2.x)的高峰.在这种情况下,print是一个声明,这就是为什么这些工作分别不起作用的原因:

print "Look ma, no parenthesis!"

x = lambda y: print "Whoops!" # invalid, print not an expression

那么构造是什么 – 是这些陈述还是表达式?同样,它取决于特定的语言.在C和Java中,这些都是明确的陈述:没有办法使用诸如替代值.

另一方面,Scala(和Ruby)允许将这种流控制结构用作表达式,尽管它们也可以作为语句出现:

var emotionalResponse = if (color == "green") {

log.cheer()

new Cheering()

} else {

new Tears()

}

呼.这很多 – 而且几乎不全面.但是,回到可以重新考虑的“定义”,当考虑上面的各种例子时:

如果有问题的构造可能发生在需要值的地方(例如,在赋值的右侧,作为函数参数,作为另一个表达式的输入),那么它可以被视为表达式;在这样的背景下,绝对是一种表达.如果构造出现在无法通过替换访问值的位置,则它(或者更确切地说,可以充当)语句.

1要处理的另一类产品是声明,例如C语言中的函数声明或Java中的类定义,并且可以说不是语句;因为以下内容已经非常分散,所以这是一个很好的说明.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值