【问题标题】:Python - notation for redundant lambda parametersPython - 冗余 lambda 参数的表示法
【发布时间】:2020-08-29 19:56:03
【问题描述】:

我正在尝试构建一个函数

f(x, y, z)

xy 都对结果没有任何影响。尽管如此,它们必须传递给函数,因为传递是由库完成的。我想:

  • 使用 lambda 表达式解决此问题,并且
  • 确保任何阅读我的代码的人都会立即知道 xy 是多余的。

正如我所收集的,使用下划线字符作为来自多值返回函数的冗余返回值是常见的做法,例如

a, _, c, d, _, _ = return_six_things(),

但是,尝试

f = lambda _, _, z: some_operation(z)

崩溃,异常警告作者使用“重复参数”(两个下划线字符)。

还有其他选择吗?

附:为了避免 XY 问题,我想使用 lambdas 的原因是为了节省一些源代码字符。无论如何我都愿意使用它们,但声明“这些参数不会被使用”对我来说更重要。

【问题讨论】:

  • 你是什么意思,the passing is done by a library
  • 我认为这对于 SO 来说是一个定义明确的问题,但可能会在代码审查中标记出来。在这里使用 lambda 来保存一些字符会为了简洁而牺牲清晰度 imo
  • @anon01 我有一个名为“apply_fn_to_some_objects(fn)”的库函数。我打算调用 'apply_fn_to_some_objects(lambda _, __, z: some_operation(z))'。
  • apply_fn_to_some_objects(my_fun, *my_fun_args, **my_fun_kwargs) 不起作用?
  • @anon01 我徒劳地试图表达我想要使用 lambda 而不是 需要 使用 lambda 的事实。无论“简洁”是什么,我都渴望它。单字表达是我经常沉迷于自己的一种乐趣。

标签: python lambda parameters notation


【解决方案1】:

我会为第二个未使用的参数使用双下划线 (__):

f = lambda _, __, z: some_operation(z)

【讨论】:

  • 哦,双下划线!完全避开了我,这正是我要找的。谢谢
【解决方案2】:

选项:

# pass in z as a keyward argument
# like this: f(x,y,z=1)
f = lambda *_,z: some_operation(z)

#Or:
# pass in any number of arguments and only use the last argument 
f = lambda *z: some_operation(z[-1])

【讨论】:

  • 第一个选项,你需要这样调用函数:f(1,2,z=3)
猜你喜欢
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多