对python变量作用域的怀疑

发布于 2021-01-29 15:00:26

这个问题已经在这里有了答案

8年前关闭。

可能重复:
Python范围规则的简短描述

我写了两个简单的函数:

# coding: utf-8
def test():
    var = 1 
    def print_var():
        print var 
    print_var()
    print var

test()
# 1
# 1
def test1():
    var = 2 
    def print_var():
        print var 
        var = 3 
    print_var()
    print var

test1()
# raise Exception

相比之下,test1()在之后赋值print var,然后引发Exception:,UnboundLocalError: local variable 'var' referenced before assignment我认为当我调用inner时print var,var的值为2,我错了吗?

关注者
0
被浏览
101
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    是的,您在这里不正确。函数定义引入了新的范围。

    # coding: utf-8
    def test():
        var = 1 
        def print_var():
            print var    <--- var is not in local scope, the var from outer scope gets used
        print_var()
        print var
    
    test()
    # 1
    # 1
    def test1():
        var = 2 
        def print_var():
            print var     <---- var is in local scope, but not defined yet, ouch
            var = 3 
        print_var()
        print var
    
    test1()
    # raise Exception
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看