python的函数是值传递还是引用传递_Python函数参数值传递和引用传递

Python参数值传递和引用传递教程

如果实参的类型为不可变类型,比如

传递和引用传递

数据类型

传递方式

字符串

值传递

数字

值传递

元组

值传递

列表

引用传递

字典

引用传递

值传递和引用传递的区别

如果函数参数的传递是值传递,那么如果在函数体中修改形参的值,那么不会影响实参的值。而如果函数参数传递的是引用,那么在函数体中改变形参的值,实参的值也会一同改变。

案例

参数是字符串类型

如果函数的参数是字符串类型,那么参数传递时值传递

print("嗨客网(www.haicoder.net)")

# 如果函数的参数是字符串类型,那么参数传递是值传递

def change_str(s):

s = "haicoder"

s = "HaiCoder"

change_str(s)

print("s =", s)

程序运行后,控制台输出如下:

我们定义了一个函数 change_str,传入一个参数 s。接着,在该函数体里面修改了传入的参数 s 的值,将参数 s 修改为 “haicoder”。

最后,我们调用了 change_str 函数,并传入了参数 s,即 “HaiCoder”,最后使用

因为,字符串类型的实参是按照值进行参数传递的,因此,我们在函数内部无法通过形参修改实参的值。

参数是元祖类型

如果函数的参数是元祖类型,那么参数传递时值传递

print("嗨客网(www.haicoder.net)")

# 如果函数的参数是元祖类型,那么参数传递是值传递

def change_tup(tup):

tup = ("haicoder")

tup = ("HaiCoder", "Python")

change_tup(tup)

print("tup =", tup)

程序运行后,控制台输出如下:

我们定义了一个函数 change_tup,传入一个参数 tup。接着,在该函数体里面修改了传入的参数 tup 的值,将参数 tup 修改为 ("haicoder")。

最后,我们调用了 change_tup 函数,并传入了参数 tup,最后使用 print 函数打印变量 tup,我们发现,变量 tup 的值还是原来的值而不是修改后的值。

因为,元祖类型的实参是按照值进行参数传递的,因此,我们在函数内部无法通过形参修改实参的值。

参数是列表类型

如果函数的参数是列表类型,那么参数传递是引用传递

print("嗨客网(www.haicoder.net)")

# 如果函数的参数是列表类型,那么参数传递是引用传递

def change_lis(lis):

lis.append("Hello")

lis = ["HaiCoder", "Python"]

change_lis(lis)

print("lis =", lis)

程序运行后,控制台输出如下:

我们定义了一个函数 change_lis,传入一个参数 lis。接着,在该函数体里面使用列表的

最后,我们调用了 change_lis 函数,并传入了参数 lis,最后使用 print 函数打印变量 lis,我们发现,变量 lis 的值已经是修改后的值。

因为,列表类型的实参是按照引用进行参数传递的,因此,我们在函数内部可以通过形参修改实参的值。

参数是字典类型

如果函数的参数是字典类型,那么参数传递是引用传递

print("嗨客网(www.haicoder.net)")

# 如果函数的参数是字典类型,那么参数传递是引用传递

def change_dic(dic):

dic["Online"] = True

dic = {"Site":"HaiCoder", "Category":"Python"}

change_dic(dic)

print("dic =", dic)

程序运行后,控制台输出如下:

我们定义了一个函数 change_dic,传入一个参数 dic。接着,在该函数体里面给传入的字典增加一个元素。

最后,我们调用了 change_dic 函数,并传入了参数 dic,最后使用 print 函数打印变量 dic,我们发现,变量 dic 的值已经是修改后的值。

因为,字典类型的实参是按照引用进行参数传递的,因此,我们在函数内部可以通过形参修改实参的值。

Python参数值传递和引用传递总结

在 Python 中, 根据函数的参数的数据类型不同,可以将函数参数的传递方式分为按值传递和引用传递。

如果实参的类型为不可变类型,比如字符串、数字和元组等,那么参数的传递方式就是按值传递,如果实参的类型为可变类型,比如列表和字典等,那么参数的传递方式就是按引用传递。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值