1. <legend id='ubpCz'><style id='ubpCz'><dir id='ubpCz'><q id='ubpCz'></q></dir></style></legend>

    <small id='ubpCz'></small><noframes id='ubpCz'>

  2. <tfoot id='ubpCz'></tfoot>

    <i id='ubpCz'><tr id='ubpCz'><dt id='ubpCz'><q id='ubpCz'><span id='ubpCz'><b id='ubpCz'><form id='ubpCz'><ins id='ubpCz'></ins><ul id='ubpCz'></ul><sub id='ubpCz'></sub></form><legend id='ubpCz'></legend><bdo id='ubpCz'><pre id='ubpCz'><center id='ubpCz'></center></pre></bdo></b><th id='ubpCz'></th></span></q></dt></tr></i><div id='ubpCz'><tfoot id='ubpCz'></tfoot><dl id='ubpCz'><fieldset id='ubpCz'></fieldset></dl></div>

      <bdo id='ubpCz'></bdo><ul id='ubpCz'></ul>
    1. 如何在Python中确定作用域

      时间:2024-08-21
      <legend id='6RNc2'><style id='6RNc2'><dir id='6RNc2'><q id='6RNc2'></q></dir></style></legend>

          <small id='6RNc2'></small><noframes id='6RNc2'>

            • <bdo id='6RNc2'></bdo><ul id='6RNc2'></ul>

              <tfoot id='6RNc2'></tfoot>
              <i id='6RNc2'><tr id='6RNc2'><dt id='6RNc2'><q id='6RNc2'><span id='6RNc2'><b id='6RNc2'><form id='6RNc2'><ins id='6RNc2'></ins><ul id='6RNc2'></ul><sub id='6RNc2'></sub></form><legend id='6RNc2'></legend><bdo id='6RNc2'><pre id='6RNc2'><center id='6RNc2'></center></pre></bdo></b><th id='6RNc2'></th></span></q></dt></tr></i><div id='6RNc2'><tfoot id='6RNc2'></tfoot><dl id='6RNc2'><fieldset id='6RNc2'></fieldset></dl></div>
                  <tbody id='6RNc2'></tbody>

              1. 本文介绍了如何在Python中确定作用域的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                为什么第二个函数中的第一个print语句引发x未定义的错误?

                x = 5
                
                def function_a():
                    print(x)
                
                
                def function_b():
                    print(x)
                    x = 7
                    print(x)
                

                运行第一个函数将产生以下结果。

                >>> function_a()
                5
                

                运行第二个函数时引发错误。

                UnboundLocalError: local variable 'x' referenced before assignment
                

                推荐答案

                Python将推断并在看到内部作用域中声明的变量时使用该变量,即使该变量是在使用之后声明的。

                为了演示这一点,我创建了两个方案。


                在内部范围内声明的变量

                变量按以下顺序推断:局部、非局部和全局。由于x是在内部作用域内声明的,因此Python将推断并使用此作用域中的x,即使它是在使用之后声明的。

                请注意,Python无法区分修改声明;从全局作用域修改x被解释为声明该作用域内的另一个变量x

                内部作用域内未声明任何变量

                如果在内部作用域中没有声明变量,则Python会将推断的作用域切换到非本地,然后切换到全局。

                显式切换作用域

                如果您事先显式声明了x的作用域,则Python将不必推断。

                下面的代码不会引发错误,因为它使用的作用域显式是全局作用域,而不是内部作用域。

                x = 5
                
                def scope():
                    global x
                    print(x)
                    x = 7
                    print(x)
                

                作用域

                通过选择要使用的作用域,您不仅可以使用该特定作用域中的变量,还可以修改变量。因此,在处理作用域时需要格外小心。

                因为Python无法区分变量声明变量修改,所以我的建议是,如果您要使用全局变量,应该事先显式声明它。

                这也适用于嵌套作用域。

                x = 5
                
                def outer():
                    x = 7
                
                    def inner():
                        nonlocal x
                        print(x)
                        x = 3
                        print(x)
                    
                    inner()
                

                运行外部函数将产生以下结果。

                >>> outer()
                7
                3
                

                尝试将nonlocal关键字更改为global并查看不同的结果;或者完全删除该行以显示错误。

                这篇关于如何在Python中确定作用域的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  <bdo id='Hy0NQ'></bdo><ul id='Hy0NQ'></ul>

                    <tfoot id='Hy0NQ'></tfoot>
                      <tbody id='Hy0NQ'></tbody>

                        <small id='Hy0NQ'></small><noframes id='Hy0NQ'>

                        <legend id='Hy0NQ'><style id='Hy0NQ'><dir id='Hy0NQ'><q id='Hy0NQ'></q></dir></style></legend>
                          <i id='Hy0NQ'><tr id='Hy0NQ'><dt id='Hy0NQ'><q id='Hy0NQ'><span id='Hy0NQ'><b id='Hy0NQ'><form id='Hy0NQ'><ins id='Hy0NQ'></ins><ul id='Hy0NQ'></ul><sub id='Hy0NQ'></sub></form><legend id='Hy0NQ'></legend><bdo id='Hy0NQ'><pre id='Hy0NQ'><center id='Hy0NQ'></center></pre></bdo></b><th id='Hy0NQ'></th></span></q></dt></tr></i><div id='Hy0NQ'><tfoot id='Hy0NQ'></tfoot><dl id='Hy0NQ'><fieldset id='Hy0NQ'></fieldset></dl></div>