擅长:python、mysql、java
<p>虽然答案已被接受,但我想展示一个替代方案,即如何从技术上使用<strong>inspect</strong>和<strong>globals()</strong>从父函数访问参数,此示例将起作用:</p>
<pre><code>import inspect
# as argument
SoundGeneratorObject = 'Hello World'
def PlayStream(SoundGeneratorObject):
a, b, c = 8, 9, 10
print "do a callback"
callback(a, b, c)
def callback(a, b, c):
print a, b, c
# inspect.stack[1][3] can get the function name that called the callback
# inner globals then access to the function by its name
# func_code.co_varnames will then get the argument name from the function
# since you only have 1 argument, that's why I use index [0]
# the outer globals will then access the argument value by its name
print globals()[globals()[inspect.stack()[1][3]].func_code.co_varnames[0]]
# call the parent function
PlayStream(SoundGeneratorObject)
do a callback
8 9 10
Hello World # successfully get the argument value
</code></pre>