【问题标题】:Calling a variable from a function in a function从函数中的函数调用变量
【发布时间】:2020-03-19 13:25:54
【问题描述】:

快速提问。我首先定义了一个函数prc_chgd,它最终给了我一个变量ans,但作为中间步骤给了我一个变量price。 现在,我想编写一个后续函数 hdg,它使用相同的输入顺序,使用中间变量 price 来计算其他内容。不幸的是,我不知道如何:S

def prc_chgd(p0, ta, ya, tb, yb, cb, delta1_y, delta2_y):
    price = xyz
    ans   = price*abc

def hedge(p0, ta, ya, tb, yb, cb, delta1_y, delta2_y):
    from prc_chgd(p0, ta, ya, tb, yb, cb, delta1_y, delta2_y) import price
    ans = price*xxxx

关键是函数是笔记本作业中的两个独立练习,我可能必须使用新输入重新计算前面的函数(但顺序相同),并且只选择定义的变量 price 供我计算。

提前致谢!

【问题讨论】:

  • hedge 是从哪里调用的?如果您想在其他地方使用它,您需要从prc_chgd 返回price

标签: python function variables


【解决方案1】:

我无法完全理解,但我认为您的 xyzp0, ta, ya 等的某种神秘组合。

在这种情况下,您应该将价格计算放入单独的函数中,例如

def calc_price(p0, ta, ya, tb, yb, cb, delta1_y, delta2_y):
    return xyz # calculated with these inputs

def prc_chgd(p0, ta, ya, tb, yb, cb, delta1_y, delta2_y):
    price = calc_price(p0, ta, ya, tb, yb, cb, delta1_y, delta2_y)
    ans = price * abc

def hedge(p0, ta, ya, tb, yb, cb, delta1_y, delta2_y):
    price = calc_price(p0, ta, ya, tb, yb, cb, delta1_y, delta2_y)
    ans = price * xxxx

如果你想避免你的 price 被计算两次,你也可以这样做

def calc_price(p0, ta, ya, tb, yb, cb, delta1_y, delta2_y):
    return xyz # calculated with these inputs

def prc_chgd(price):
    ans = price * abc

def hedge(price):
    ans = price * xxxx

并将calc_price() 的调用频率留给调用者。

【讨论】:

    【解决方案2】:

    如果你想这样,你可以从你的函数中返回多个值:

    def prc_chgd(p0, ta, ya, tb, yb, cb, delta1_y, delta2_y):
        price = xyz
        ans   = price*abc
        return price, ans
    
    
    def hedge(p0, ta, ya, tb, yb, cb, delta1_y, delta2_y):
        price, ans = prc_chgd(p0, ta, ya, tb, yb, cb, delta1_y, delta2_y)
        ans = price*xxxx
    

    【讨论】:

    • 理论上看起来不错,但在我的作业中,第一个函数是在 prc_chgd 的输出上评估的,并且只会取一个值。因此,如果我在函数体中返回两个值,我会从我的作业中收到一条错误消息,说它只需要一个值作为输出。
    【解决方案3】:

    返回多个返回值的函数应该在python中产生:

    def prc_chgd(p0, ta, ya, tb, yb, cb, delta1_y, delta2_y):
       price = xyz
       yield price
       ans   = price*abc
       yield ans
    

    您可以生成任意数量的值。 然后您可以在 for 循环中遍历所有答案:

    for total in prc_chgd(1,2,3,4,5,6,7,8):
       print total
    

    首先它会打印价格,然后是 price*abs。由于这两个函数属于同一类,我建议使用一个类。

    【讨论】:

      猜你喜欢
      • 2015-10-25
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      • 2021-11-27
      • 2017-03-06
      • 2016-12-07
      • 1970-01-01
      相关资源
      最近更新 更多