给出以下Python函数(忽略其缺点):
def adjust_year(year):
return year > 2000 and year - 2000 or year - 1900
如果我将其更改为:
def adjust_year(year):
return year - 2000 if year > 2000 else year - 1900
行为是否相同或者我是否以某种微妙的方式改变了它?
答案 0 :(得分:2)
它们确实是等价的,但首选条件表达式变体。
你的表达式几乎避免了典型的and ... or
陷阱,其中中间表达式评估为假值(year >= 2000 and year - 2000 or year - 1900
而year = 2000
将导致100
)。
答案 1 :(得分:1)
有几种方法可以解决这个问题。一个是逻辑分析两个版本;另一种是使用蛮力并比较每个有效输入的结果:
def adjust_year_1(year):
return year > 2000 and year - 2000 or year - 1900
def adjust_year_2(year):
return year - 2000 if year > 2000 else year - 1900
for y in range(-4000, 4000):
if adjust_year_1(y) != adjust_year_2(y):
print y, adjust_year_1(y), adjust_year_2(y)
这不打印任何东西,证明这些函数在-4000到4000之间确实相当多年(很容易看出它们对于超出此范围的输入也是等效的。)