Passing parameter to inner function
我有一个内在的功能。我想知道什么是将变量传递到内部函数的正确方法。从我所看到的情况来看,表是默认传递的,尽管我不确定这是一个未记录的解决方案还是Python设计。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def function(): def inner_function(): if a[0] > b[0]: print("a[0] = {0}, b[0] = {1}".format(a[0], b[0])) tmp = c c = d d = tmp a = [4, 3] b = [2, 1] c = 1 d = 2 inner_function() function() |
python test.py输出:
$ python test.py a[0] = 4, b[0] = 2 Traceback (most recent call last):
File"test.py", line 16, in
function()
1 File"test.py", line 14, in functioninner_function()
1 File"test.py", line 5, in inner_functiontmp = c
UnboundLocalError: local variable 'c' referenced before assignment
将变量从"函数"传递到"内部函数"的正确方法是什么?除了按参数,还有其他方法吗?为什么在"c"变量引用上有错误而不是在"a"表上?
afaik
https://pyfiddle.io/fiddle/184e1778-adb7-4759-8951-da699751c31e/
有关python嵌套函数变量范围的详细信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def function(): def inner_function(): if a[0] > b[0]: print("a[0] = {0}, b[0] = {1}".format(a[0], b[0])) tmp = c new_c = d new_d = tmp a = [4, 3] b = [2, 1] c = 1 d = 2 inner_function() function() |
虽然您的问题已经得到了解答,但我不确定您的代码为什么会产生这个错误。
不管怎样,尽管你的口译员不同意,但要澄清引起问题的那条线是
为了说明清楚,Python没有区分变量的类型(例如Java)。
What is a proper way to pass variables from"function" to
"inner_function"?
使用参数是正确的方法。
Is there any other way than by parameter?
正如其他人提到的,您可以使用全局变量,但不建议将其作为方法。
Why there is an error on"c" variable reference and not on"a" table?
正如我前面提到的,不同类型的变量之间没有区别。使它们不同的是,您在变量
这个具体的答案(也由@raul.vila提到)提供了一个很好的解释。
最后,因为还不清楚你想在这里实现什么。如果尝试在内部函数中打印全局(甚至隐式)变量,或者尝试在内部函数中更改全局变量的值,则存在差异。
我猜Python的方式绝对是指鸭子和兔子,甚至可能是骑士。我还希望第二个@metareven将它们作为参数传入,因为Python处理它们的方式非常简洁。这样就不必担心@global变量。你很清楚什么进去了,什么出来了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | def function(duck): def inner_function(rabbit): if rabbit[0][0] > rabbit[1][0]: print("a[0] aka the first one behind the rabbit = {0}, b[0] aka the second one behind the rabbit = {1}".format(rabbit[0], rabbit[1])) tmp = rabbit[2] rabbit[2] = rabbit[3] rabbit[3] = tmp inner_function(duck) #Let's sort out the arguments a = [4, 3] b = [2, 1] c = 1 d = 2 function([a,b,c,d]) |
函数调用返回以下内容:
1 2 3 | python innner.py a[0] aka the first one behind the rabbit = [4, 3], b[0] aka the second one behind the rabbit = [2, 1] |
这个回答了你的问题吗?
您需要将C和D变量声明为全局变量(顺便说一下,这不是一个好主意)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | def function(): global c,d a = [4, 3] b = [2, 1] c = 1 d = 2 def inner_function(): if a[0] > b[0]: global c,d print("a[0] = {0}, b[0] = {1}".format(a[0], b[0])) tmp = c c = d d = tmp inner_function() |