【问题标题】:Retrieving a value from a called function从被调用函数中检索值
【发布时间】:2020-09-03 11:54:38
【问题描述】:

我正在使用 Python3。

假设我们有四个函数,a, b, cd。现在假设调用栈如下:

a 调用b,后者调用c,后者调用d。函数d 计算一个参数x,稍后在函数a 中需要它,但除此之外,xbc 完全无关。

我的问题是,“获取”变量 x 以运行 a 的最佳方法是什么。直观地说,我可以让所有函数也返回x,这样x 就可以在函数a 中访问。但是,这感觉很“糟糕”,因为参数x 与其他函数完全无关。我可能会使用指针吗?我只是想知道解决这种情况的最专业的方法。

【问题讨论】:

  • 试一试,向我们展示您的尝试,然后我们可以为您提供帮助。
  • 也许您可以将 x 分配给全局变量?虽然,根据具体情况,这可能是一个伟大的想法,也可能是一个糟糕的想法......
  • a 没有直接调用d,所以如果我们可以假设bcd 做了一些必要的事情,他们已经知道它们是中间函数并传播它们的回去工作就好了。如果这些东西都高度耦合,它们都可以成为一个类的一部分,实现不同的位。
  • 你需要解释清楚
  • “这感觉很“糟糕”,因为参数 x 与其他函数完全无关” 如果确实如此,这通常表明函数之间的工作分配方式存在问题。没有一个真实的例子很难给出建议。

标签: python function return call


【解决方案1】:

您可以让函数d 将值分配给函数a 的成员变量x

def a():
  ... # some work
  b()
  print('x =', a.x)

def b():
  ... # some work
  c()

def c():
  ... # some work
  d()

def d():
  ... # some work
  a.x = 5 # make the value 5 available to the function `a` through the member variable `x`

a()

输出:

x = 5

【讨论】:

    【解决方案2】:

    没有办法在函数之间神奇地传递值。几个选项是:

    • 中间函数从前一个函数中获取x 只是为了返回它
    • 中间函数需要一个额外的参数,可以存储x,然后d填充它。
    • xa 中计算并传递给bcd,以便d 可以使用它。
    • 所有这些函数都是将x 存储为属性的类的方法,因为所有方法都可以访问属性。

    不过,所有这些都是您所认为的“坏”做法。正如许多 cmets 所说,可能有更好的方法来分隔函数之间的代码,这样您就不必共享该值。如果没有更具体的例子,没有人可以在这里真正帮助您,但有些可能性是:

    • 展平调用图,以便a 直接调用所有其他函数;那么d可以直接回xa
    • 如果x 很容易/便宜地计算,只需分别计算两次ad(并且可能有一个单独的函数来计算它)
    • 将使用x的代码从a移动到d

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 2020-02-18
      相关资源
      最近更新 更多