[英]Confusion in an Python program related to topic of Namespace and Scope
我最近刚接触python,现在到达了命名空间和范围的主题。 为了进一步理解该主题, 我发现其中包含一个引起我困惑的程序。
而且,这是程序:
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
!
无论如何,我会记住不要再犯同样的错误。 感谢那些帮助您解决此基本语法错误的人!
干杯!
inner_function
在第3行中声明,但仅被调用过一次 ,在第7行中。
如果取出第7行, a1
将永远不会打印。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.