对带有字典的 Python 命名空间感到好奇

Curious about Python namespace with dictionary

我正在使用Python3.7,我对字典的命名空间很好奇。 这是我的问题。

我们先定义一个dict:

r = {'a':[1,2,3], 'b':[4,5,6]}

然后我们定义一个函数:

def fun1():
    print(r['a'])

fun1()

输出:[1, 2, 3]

然后我们再定义一个函数:

def fun2():
    r = {'a':[10,11,12],'c':[7,8,9]}
    fun1()

fun2()

输出:[1, 2, 3]

为什么 fun2 [10,11,12] 的输出不是,因为在函数 func2[ 中重新定义了 r =35=]。不过好像是指向我们一开始定义的。范围不适用于字典吗?

r = {'a': [10, 11, 12], 'c': [7, 8, 9]} 仅在 fun2 内可见。 fun1 只会看到在“全局”命名空间中定义的 r

如果你想让新的 r 在 fun1 中可见,你必须像这样在 fun2 中定义 fun1 :

def fun2():
    r = {'a':[10,11,12],'c':[7,8,9]}
    def fun1():
      print(r['a'])
    fun1()

否则你可以像这样将 r 作为参数传递给 fun1:

def fun1(r):
    print(r['a'])

def fun2():
    r = {'a':[10,11,12],'c':[7,8,9]}
    fun1(r)

fun2()