首先要搞清楚表达式和语句的区别。
在编程中,表达式是由一个或多个值、运算符和函数组成的组合,通常会返回一个结果。表达式可以是非常简单的,例如一个数字或一个变量,也可以是更复杂的,例如一个函数调用或一个包含多个运算符的算术表达式。
表达式是一个计算结果的代码片段。它可以由操作数、操作符和函数调用组成,例如 2 + 3
、x * y
、math.sqrt(z)
等等。在 Python 中,表达式可以包括字面值、变量、函数调用等。表达式的执行结果可以是值、对象、布尔值等。
语句是一组用于执行特定操作的代码片段,例如赋值语句、条件语句、循环语句等。语句通常会对程序状态做出更改,例如修改变量值、输出结果、跳转到不同的代码块等。
刚才提到的2+3是表达式,但a=2+3就是语句了。
于是,表演开始,
列表推导式总共有两种形式:
①[x for x in data if condition]
此处if主要起条件判断作用,data数据中只有满足if条件的才会被留下,最后生成一个列表
②[表达式1 if condition else 表达式2 for x in data]
此处if...else主要起赋值作用,当data中的数据满足if条件时执行表达式1,否则执行表达式2,最后生成一个列表。
提问,
x=4
y=0
x / y if y!=0 else 4 的结果是多少?1还是4?
x/y是一个表达式,整体被4替换,结果变成4。
答案,
表达式 x / y
会抛出一个除以零的异常,但是由于使用了条件表达式 x / y if y!=0 else 4
,它会在除数 y
不为零时返回计算结果 x / y
,否则返回默认值 4
。在这个例子中,y
的值为 0
,不符合除数的要求,因此使用了默认值 4
,最终结果为 4
。
提问,
x = 4
y = 0
if y != 0:
result = x / y
else:
result = x/4
print(result)
用推导式怎么实现?
答案
x = 4
y = 0
result = [x / y if y != 0 else x / 4][0]
print(result) # 输出 1.0
x/y是一个表达式,整体被x/4替换,结果变成1。
提问,
b=0
a = 1 if b==1 else 3 if b==0 else 4
a的结果是什么?1还是3?
答案,
在这个表达式中,首先判断 b
是否等于 1
,如果是,将 a
的值赋为 1
;否则判断 b
是否等于 0
,如果是,将 a
的值赋为 3
,否则将 a
的值赋为 4
。
由于 b
的值为 0
,不满足第一个条件 b==1
,因此进入第二个条件 b==0
,将 a
的值赋为 3
。因此,最终 a
的值为 3
。
这里就反映出表达式和语句的问题了,1是表达式,a=1是语句,这段代码其实是用3替换了1,所以赋值后,a就成了3。
提问,上面的问题我改了一下,
b = 0
a=1
a if b==1 else 3 if b==0 else 4
print(a)
答案,
在这个例子中,表达式 a if b==1 else 3 if b==0 else 4
中的条件语句中,第一个条件为 b==1
,如果为 True
,将返回 a
的值,否则继续判断第二个条件 b==0
,如果为 True
,将返回 3
,否则将返回 4
。在这个例子中,b
的值为 0
,因此不满足第一个条件 b==1
,进入第二个条件 b==0
,将返回值设为 3
。但是由于这个返回值没有被赋值给变量,因此 a
的值仍然是 1
。
这里,用3替换了a。所以最后a if b==1 else 3 if b==0 else 4
的结果是3,
但是a还是1。
b = 0
a = 1
result = a if b==1 else 3 if b==0 else 4
print(result) # 输出 3
print(a) # 输出 1
OK。That's all。