对带有字典的 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()
我正在使用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()