【问题标题】:trouble understanding a specific lambda function syntax无法理解特定的 lambda 函数语法
【发布时间】:2021-12-10 13:21:59
【问题描述】:

我无法理解这段代码,特别是它的语法。

a_list = [1,2,3,4,5,6]  
pi = lambda s: {s:a for s, a in enumerate(a_list)}[s]

我了解 lambda 函数,但 [s] 在这里做什么?

【问题讨论】:

  • 它正在访问刚刚通过键构建的字典中的值。
  • 这只是写得很糟糕的代码 - 它在这里使用名称 s 用于两个完全不同的目的,将整个列表变成字典只是为了从中选择一个项目是完全没有意义的字典。 lambda s: a_list[s] 会做同样的事情,而且要快得多。
  • 是的,谢谢@jasonharper
  • 旁注:avoid named lambdas,请改用def
  • 认为[s]会做什么?如果您尝试分解代码,它会变得显而易见吗?尽管代码令人困惑,但我不确定您为什么会感到困惑。顺便说一句,欢迎来到 Stack Overflow!如果需要提示,请查看tourHow to Ask

标签: python lambda


【解决方案1】:

[s] 是在 lambda 内置的 dict 中检索值的键。

s 是 2 个同名的不同变量,所以也许这种方式更具可读性,并且做的事情完全相同:

pi = lambda s: {key: val for key, val in enumerate(a_list)}[s]

【讨论】:

  • 这仍然是非常糟糕的代码。不要试图擦亮粪便,你知道吗?当您可以简单地执行 a_list[s] 时,构建 dict 毫无意义。另一件事是named lambdas should be avoided;请改用def
  • [s] 是在 lambda 中的 dict 构建中检索值的键。问题是关于代码的目的不是让它变得丑陋。
  • 我的意思是你说“更具可读性,它做同样的事情”,但是完全放弃 dict 废话并执行a_list[s] 会更具可读性,这也完全一样事物。 IMO,答案不应该宣传糟糕的代码,所以如果包括糟糕的代码,至少要说明它很糟糕以及为什么。
猜你喜欢
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
相关资源
最近更新 更多