0

给定以下 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

行为是等效的还是我以某种微妙的方式改变了它?

4

2 回答 2

2

它们确实是等价的,但首选条件表达式变化。

您的表达式勉强避免了and ... or中间表达式计算为假值(year >= 2000 and year - 2000 or year - 1900并将year = 2000导致100)的典型陷阱。

于 2013-02-14T19:15:39.400 回答
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 之间的年份确实是等效的(很容易看出它们对于超出此范围的输入也是等效的)。

于 2013-02-14T19:18:54.857 回答