这些Python表达式是等价的吗?

2024-04-24 08:54:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这种行为会是等同的还是我用某种微妙的方式改变了它?你知道吗


Tags: orand函数returnifdef方式year
2条回答

它们确实是等价的,但条件表达式变体是首选的。你知道吗

表达式勉强避免了典型的and ... or陷阱,即中间表达式的计算结果是错误的值(year >= 2000 and year - 2000 or year - 1900year = 2000将导致100)。你知道吗

有几种方法可以解决这个问题。一种是逻辑分析两个版本;另一种是使用暴力并比较每个有效输入的结果:

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之间确实是等价的(很容易看出,对于这个范围之外的输入,它们也是等价的)。你知道吗

相关问题 更多 >