我刚刚介入python,现在我开始讨论Namespace和Scope的主题。为了进一步理解这个主题,I found this包含一个导致我混乱的程序。
而且,这是程序:
1 def outer_function():
2 a = 20
3 def inner_function():
4 a = 30
5 print('a =',a)
6
7 inner_function()
8 print('a =',a)
10
11 a = 10
12 outer_function()
13 print('a =',a)
这里的结果你必须非常确定,但我不是
a = 30
a = 20
a = 10
但我脑海中的输出应该是
a = 30
a = 30
a = 20
a = 10
即使我将原始代码修改为这样,以便更清楚:
def outer_function():
a = 20
def inner_function():
a = 30
print('a1 =',a)
inner_function()
print('a2 =',a)
a = 10
outer_function()
print('a3 =',a)
但它仍然是这样的:
a1 = 30
a2 = 20
a3 = 10
所以,我之所以认为那应该是双a1 = 30
是因为我认为代码中的line5
被执行了两次,
首先,它会在outer_function()
调用line12
时运行,line1
从line8
调到line5
,a1 = 30
调用line7
输出
其次,调用line5
,使用与上面相同的输出再次触发outer_function()
,
最后,line8
函数会在a2 = 20
完成时结束,line13
出现时就会结束。
然后回到"主线程" (我只是称它为实际上并不意味着它,或者是它?)a3 = 10
并打印line5
所以,我得到的并不是我想的,我对这个程序的理解有什么不对?
感谢您花时间阅读我的问题,如果您可以帮我一点,这将对我有很大的帮助:)提前致谢
我刚刚发现了我的困惑!非常感谢那些帮助我的人。
原来我混淆的主要问题是我对编程知识的不稳定基础。所以,我错误地认为inner_function()
将在声明a = 30
时运行。哈哈哈,怎么会这样呢?这个基本的错误刚刚发生 - 函数的声明永远不会运行,直到在程序中调用它!这就是为什么只有一个$issue[] = "$row->issue, $row->category";
!
无论如何,我会记住,不要再犯同样的错误。我非常感谢那些帮助解决这个小小的基本句法错误的人!
干杯!
答案 0 :(得分:2)
第{3}行宣布了inner_function
,但只有一次,而第7行就是
如果您取出第7行,a1
将永远无法打印。