【问题标题】:How to force recalculation of dependent parameter values in function argument when non-default dependency is passed?传递非默认依赖项时,如何强制重新计算函数参数中的依赖参数值?
【发布时间】:2021-03-02 18:03:46
【问题描述】:

假设我有 3 个变量和一个函数 func

a=1;b=1;c=1
def func(a=a,b=b,c=b/a):
    print(a,b,c)

令我惊讶的是,func(b=2) 产生了一个输出:

1 2 1.0

为什么c不是b/a,即不是2/1=2

如果传递了非默认ab(即它们中的任何一个不等于1),我如何让函数在调用时重新计算c

【问题讨论】:

  • 如果你能推荐一个更好的问题标题,我愿意接受。

标签: python function arguments default-arguments


【解决方案1】:

如果你想让 c 在没有传递任何值时有一个默认值,请在函数参数中设置 c=None 并在没有传递 c 值时在函数内部设置默认值

a=1;b=1;c=1
def func(a=a,b=b,c=None):
    c = c if c is not None else b/a
    print(a,b,c)

Note: earlier solution fail when c=0 so updated as suggested by @MisterMiyagi

【讨论】:

  • 谢谢。如果 c 最初是一个数字(尝试使用 0 和 1),可以确认这确实有效。您能否详细说明if c 位的工作原理?我注意到如果 c 最初设置为值 False,此方法将失败,但这是一个非常特殊的情况。
  • 此答案基于 c 是否为 int 类型。 how if c work ,仅当您将 c 设置为 True 而不是 False 时才会失败,因为它会为 c 提供输出 True。基于所有参数的注释答案是 int 类型的
  • 传入c=0时会失败,例如func(1, 2, 0)。检查应该明确地测试... if c is not None else ...
  • @MisterMiyagi 更新解决方案
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 2022-11-14
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-24
  • 1970-01-01
相关资源
最近更新 更多