失业程序员复习python笔记——函数参数传递

失业程序员复习python笔记——函数参数传递

经验文章nimo972025-04-27 16:02:273A+A-

Python的函数参数传递是赋值传递,或者叫对象的引用传递。Python 里所有的数据类型都是对象,所以参数传递时,只是让新变量与原变量指向相同的对象而已。

先看下面一个例子:

def func(x):
 	x = 100

a = 1
func(a)
print(a)


D:\pyproject\venv\Scripts\python.exe D:/pyproject/py16.py
1

Process finished with exit code 0


这里的参数传递,使变量 a 和 x 同时指向了 1 这个对象。但当我们执行到 x = 100 时,系统会重新创建一个值为 100 的新对象,并让 x 指向它;而 a 仍然指向 1 这个对象。所以,a 的值不变,仍然为 1。

当可变对象当作参数传入函数里的时候,改变可变对象的值,就会影响所有指向它的变量。

def func(l2):
 	l2.append(100)

l1 = [1, 2, 3]
func(l1)
print(l1)


D:\pyproject\venv\Scripts\python.exe D:/pyproject/py16.py
[1, 2, 3, 100]

Process finished with exit code 0


l1 和 l2 先是同时指向值为[1, 2, 3]的列表。不过,由于列表可变,执行 append() 函数,对其末尾加入新元素 4 时,变量 l1 和 l2 的值也都随之改变了。


再看一个传入元组的例子

def func(tup):
 		tup+(100,)

tup = (1, 2, 3)
func(tup)
print(tup)
D:\pyproject\venv\Scripts\python.exe D:/pyproject/py16.py
(1, 2, 3)

Process finished with exit code 0

这里传入的是元组,元组是不可变的,执行tup+(100,)语句后,其实新开辟了一块内存并填入原来元组的值,所以tup的值没有改变

点击这里复制本文地址 以上内容由nimo97整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

尼墨宝库 © All Rights Reserved.  蜀ICP备2024111239号-7