【问题标题】:Accessing a parameter passed to one function in another function在另一个函数中访问传递给一个函数的参数
【发布时间】:2017-03-07 17:48:19
【问题描述】:

我有两个功能:

def f1(p1=raw_input("enter data")):
    ...do something

def f2(p2=raw_input("enter data")):
    ...do something else

p1 和 p2 是相同的数据,所以我想避免两次要求输入。有没有办法可以将提供给 f1 的参数传递给 f2 而无需再次请求?理想情况下,我可以像在课堂上那样使用一些东西。比如f1.p1这可能吗?

编辑:为了更清楚起见,我研究了使用 ** 运算符来解包参数,并且我知道使用程序的主体来访问参数更干净。但是,前者与我想要做的不匹配,这是更好地理解函数中可访问的内容。我还研究了使用inspectlocals,但这些是用于检查函数内部的参数,而不是外部。

【问题讨论】:

    标签: python


    【解决方案1】:

    是的,取决于您的需求。最好的办法是在主程序中询问,然后简单地将该值传递给您调用的每个函数。另一种可能性是让一个函数调用另一个函数。

    # Main program
    user_input = raw_input("enter data")
    f1(user_input)
    f2(user_input)
    

    理想情况下,我可以像你在课堂上那样使用一些东西。 像 f1.p1 这样可以吗?

    这是一种先进的技术,通常是危险的做法。是的,您可以进入调用堆栈,获取函数对象,然后获取局部变量——但函数必须处于活动状态才能使其具有任何语义用途。

    您介绍的情况并非如此。在您的代码中,您可以独立调用 f1f2。从 f1 返回后,p1 的值会从堆栈中弹出并丢失。

    如果您有 f1 调用 f2,那么 f2 有可能返回其父级并访问信息。 不要去那里。 :-)

    【讨论】:

    • 你是对的。我已经修改了程序来做到这一点。我会赞成你的回答。只是想知道是否有另一种方法,只是为了完整起见。我查看了使用 ** 运算符,但我认为这不适合我的需求。
    • 对;不合适。那是为了传递指针参数,通常来自 Python 之外的接口。另外,请记住“接受”并回答,以便 SO 存档问题。
    • 会的。我希望其他人会做出贡献并让我知道是否像在课堂上那样访问参数,例如:f1.p1 并将其传递给 f2 有效。希望这没问题。
    • 如果你有 f1 调用 f2,那么 f2 就有可能回到它的父级并访问信息。不要去那里。 :-) 即使我从不使用它,知道它是如何完成的也会很有趣!请提供有关 Google 用途的任何线索?
    • 这超出了 SO 的章程,但有一次……我会尝试“访问堆栈函数属性”。局部变量是函数属性。请不要在没有适当通风的情况下尝试此操作,并远离小孩。
    猜你喜欢
    • 1970-01-01
    • 2012-09-25
    • 2020-10-03
    • 2011-08-18
    • 2011-03-09
    • 2014-01-06
    • 2019-10-09
    相关资源
    最近更新 更多