-4
def func1(arg1,arg2):
    do_something

def func2(arg3)
    print arg1
    print arg2

上記のように、Python で別の関数から関数の引数を呼び出すにはどうすればよいですか?

4

2 に答える 2

2

これはできません。結局、あまり意味がありません。現在、これらの関数はどういうわけか互いに呼び出しさえしていません...

しかし、たとえfunc1呼び出されたとしてもfunc2、コール スタックを含む非常に厄介なハックがなければ不可能です。

func1そのため、 inから引数にアクセスしたい場合は、呼び出すときにfunc2それらを引数として に渡す必要があります。func2


inspect興味のある方のために、モジュールを使用して呼び出し元関数に渡された引数の辞書を取得するコードを次に示します。これを本番コードで使用しないでください。

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')

出力:

呼び出し元の引数: {'arg1': 'foo', 'arg2': 'bar'}

このコードには回避できない重大な警告があることに注意してください:またはfunc1の値を変更すると、最初の値の代わりに新しい値が返されます。arg1arg2

于 2012-12-23T13:18:26.533 に答える
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
于 2012-12-23T13:30:59.537 に答える