与命名空间和Scop主题相关的Python程序中的混淆

2024-09-24 08:27:49 发布

您现在位置:Python中文网/ 问答频道 /正文

最近我刚开始使用python,现在我谈到了名称空间和范围的主题。为了进一步了解这个主题,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

首先,它在line12调用outer_function()时运行,从line1line8,并用a1 = 30输出调用line5

第二,调用line7,再次触发line5,输出与上面相同

最后,函数outer_function()line8完成时结束,也就是a2 = 20出现的时候

然后回到“main thread”(我称之为“main thread”,因为这实际上并不是指它,或者它是?line13并打印a3 = 10

所以,我得到的不是我想的,我对这个项目的理解有什么问题吗

谢谢你花时间阅读我的问题,如果你能帮我一把的话,那将对我有很大的帮助:)提前谢谢

编辑:

我刚找到我的困惑所在!非常感谢那些帮助我的人。 我困惑的主要问题是我不稳定的编程知识基础。因此,我错误地认为line5将在声明inner_function()时运行。哈哈哈,怎么会这样??这就是刚刚发生的基本错误——函数的声明在程序中被调用之前永远不会运行!这就是为什么只有一个a = 30

无论如何,我会记住不要再犯同样的错误。我很感激那些帮助解决这个小的基本语法错误的人

干杯


Tags: 函数代码程序a2主题defa1错误