def func1(arg1,arg2):
do_something
def func2(arg3)
print arg1
print arg2
上記のように、Python で別の関数から関数の引数を呼び出すにはどうすればよいですか?
def func1(arg1,arg2):
do_something
def func2(arg3)
print arg1
print arg2
上記のように、Python で別の関数から関数の引数を呼び出すにはどうすればよいですか?
これはできません。結局、あまり意味がありません。現在、これらの関数はどういうわけか互いに呼び出しさえしていません...
しかし、たとえ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
の値を変更すると、最初の値の代わりに新しい値が返されます。arg1
arg2
質問が非常に不明確であるため、これが役立つかどうかはわかりませんが、次のように関数定義をネストすることでクロージャーを作成できます。
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