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)
它们确实是等价的,但条件表达式变体是首选的。你知道吗
表达式勉强避免了典型的
and ... or
陷阱,即中间表达式的计算结果是错误的值(year >= 2000 and year - 2000 or year - 1900
和year = 2000
将导致100
)。你知道吗有几种方法可以解决这个问题。一种是逻辑分析两个版本;另一种是使用暴力并比较每个有效输入的结果:
这并没有打印任何内容,说明函数在-4000到4000之间确实是等价的(很容易看出,对于这个范围之外的输入,它们也是等价的)。你知道吗
相关问题 更多 >
编程相关推荐