2

重複の可能性:
Python スコープ規則の簡単な説明

2 つの単純な関数を作成しました。

# 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、例外を発生させます: UnboundLocalError: local variable 'var' referenced before assignment、私が inner を呼び出した瞬間print var、 var の値は 2 だと思いますが、間違っていますか?

4

1 に答える 1

1

はい、あなたはここで間違っています。関数定義は新しいスコープを導入します。

# 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
于 2012-09-12T06:43:09.077 に答える