功能中的可见性

时间:2017-01-30 12:59:30

标签: python

我有这段代码:

def h(l1,l2):
    l1.pop()
    l2 = l2 +l1



l1=[1,2,3]
l2=[]
h(l1,l2)
print (l1,l2)

为什么运行代码后,l1为[1,2]且l2保持不变([])。为什么l2不是[1,2]?

1 个答案:

答案 0 :(得分:0)

这是因为l2对于你的h函数是本地的,所以函数外的l2并不知道你改变了一些其他变量,即使它们具有相同的名称,尽管它们的范围不同。

这是你期望发生的吗?

def h(l1,l2):
    l1.pop()
    l2.extend(l1 +l2)

l1=[1,2,3]
l2=[]
h(l1,l2)
print (l1,l2)
>>> '[1, 2] [1, 2]'

在这种情况下,我没有定义一个新变量,我改变了函数内部的现有l2。这样,l2函数内部和函数外部实际上是一样的。