以下代码的更好版本(python)

时间:2013-09-01 04:37:35

标签: python function map lambda zip

所以这里我有以下代码

def u_id(_id = '6397' , uid = '97492035'):
  n = _id if _id != None else '5000'
  try:
    return "".join(list(map(lambda x: str(x[0] + x[1])[-1], list(zip(list(map(lambda x: int(x), n)), list(map(lambda x: int(x), uid[4:])))))))
  except ValueError:
    return "none"
说实话,这看起来没必要。这个函数的工作方式是,它接受提供的uid和_id并返回'6119'。基本上我无法弄清楚这个代码的编码方式。是否可能有一种不同的,不那么令人费解的方式来编码?或者如果没有解释这个功能如何工作。谢谢。

2 个答案:

答案 0 :(得分:0)

该功能真的模糊,但它没有做你认为它做的事情。你说它返回' 6119'但是,如果我运行以下代码

def u_id(_id = '6397' , uid = '97492035'):
  n = _id if _id != None else '5000'
  try:
    return "".join(list(map(lambda x: str(x[0] + x[1])[-1], list(zip(list(map(lambda x: int(x), n)), list(map(lambda x: int(x), uid[4:])))))))
  except ValueError:
    return "none"

print u_id()

我的输出是8322

我还应该补充一点,代码是使用2空格缩进,这不是很正统,使用4空格更好。

我不会为你解决这个问题(看起来很乏味,写这篇文章的人不是清晰的粉丝!)但我会告诉你如何解决它 - 你需要得到每一个这些内部函数,将它们放在自己的行上并打印出每个函数的输出。

答案 1 :(得分:0)

看起来您的功能可以像这样简化:

"".join(str(int(x) + int(y))[-1] for x, y in zip(_id, uid[4:]))

但是对于给定的参数,它返回'8322',而不是'6119'