如何在Python中将另一个函数的参数作为变量调用

时间:2012-12-23 13:15:52

标签: python

def func1(arg1,arg2):
    do_something

def func2(arg3)
    print arg1
    print arg2

如何从Python中的另一个函数调用函数的参数,如上图所示?

2 个答案:

答案 0 :(得分:2)

你不能这样做。毕竟,这没有多大意义。现在这些功能甚至不会以某种方式相互呼叫......

但即使func1调用func2,如果没有一些涉及调用堆栈的非常讨厌的黑客攻击也是不可能的。

因此,如果您想在func1中访问func2中的参数,则需要在调用它时将它们作为参数传递给func2


如果有人好奇,这里是使用inspect模块获取传递给调用者函数的参数的dict的代码。 请勿在任何生产代码中使用此功能!

import inspect

def get_caller_args():
    frame = inspect.stack()[2][0]
    argspec = inspect.getargvalues(frame)
    return {x: argspec.locals[x] for x in argspec.args}

def func1(arg1, arg2):
    test = 'xxx'
    func2('moo')

def func2(arg):
    print "caller's args: %r" % get_caller_args()

func1('foo', 'bar')

<强>输出:

  

来电者的args:{'arg1':'foo','arg2':'bar'}

请注意,此代码有一个无法避免的重要警告:如果func1更改arg1arg2的值,则会返回新值而不是初始值。< / p>

答案 1 :(得分:0)

我不知道这是否对你有帮助,因为问题很不清楚,但是你可以通过嵌套这样的函数定义来创建一个闭包:

def func1(arg1,arg2):
  do_something()

  def func2(arg3)
    print arg1
    print arg2

  return func2

the_func2 = func1(foo, bar)
do_something_else()
the_func2(42) # prints foo and bar