python函数传值

python函数传值到底传什么?有很多文章讲过这个,但是前两天被问到居然还是有点不清楚,有点蒙,今天就具体好好看看这个。


def test(a):
a = 10
print(a)

这个函数接受一个输入,假设输入20,那么输出10,python在传递参数的将20的引用传入,然后函数体内重新赋值,新建了一个对象10,并且将变量a的引用指向了10,这个变量存在这个函数的局部命名空间中,在函数中使用a,先在局部命名空间中查找,发现a,接着进行其他操作。


def test_li(li):
li.append(20)
print li
print id(li)
print locals()


def test_li(li=[]):
li.append(20)
print li
print id(li)
print locals()
def main():
# a = 90
# test(20)
li = [1, 2, 3]
for i in range(10):
test_li()

如果是传入的值是一个列表,相对而言,列表最大的不同是列表是可变类型,对于可变类型,函数内在对列表进行操作的时候不会重新创建一个新的列表,而是对之前的列表进行操作,传入的是对对象的引用。引用的也是之前的对象。

你可能感兴趣的:(python函数传值)