Python之函数参数传递问题

最近在学习python,python中的数据类型比较多样,函数中参数的传递会不会改变值的问题如果不加注意很容易与Java或C++搞混,在这里整理一下,供以后学习用。
首先要知道在python中类型是对象的一个性质,而不是变量,变量是没有类型的,它仅仅是一个引用(类似于指针)。因此我们之后谈到的“可变”和“不可变”都是指一种对象。

一、不可变类型

1、整型、浮点型等
# 1、整型、浮点型等(不可变)
def changeInt(x, y):
    x, y = y, x + y
    print("函数内:x = ", x, ",y = ", y)

#测试   
a, b = 4, 5
changeInt(a, b)
print("调用后:a = ", a, ",b = ", b)  # 结果是4和5而不是5和9


def changeDouble(x, y):
    x, y = y, x + y
    print("函数内:x = ", x, ",y = ", y)
    
#测试   
a, b = 2.4, 3.0
changeDouble(a, b)
print("调用后:a = ", a, ",b = ", b)  # 结果是2.4和3.0而不是3.0和5.4

代码结果:

函数内:x = 5 ,y = 9
调用后:a = 4 ,b = 5
函数内:x = 3.0 ,y = 5.4
调用后:a = 2.4 ,b = 3.0


2、字符串型
def changeString(string):
    string = "ABC"
    print("函数内:string = ", string)

#测试   
Str = "abc"
changeString(Str)
print("调用后:Str = ", Str)

代码结果:

函数内:string = ABC
调用后:Str = abc


3、元组
def changeTuple(Tuple):
    Tuple = (4, 5, 6)
    print("函数内:Tuple = ", Tuple)

#测试   
Tup = (1, 2, 3)
changeTuple(Tup)
print("调用后:Tup = ", Tup)

代码结果:

函数内:Tuple = (4, 5, 6)
调用后:Tup = (1, 2, 3)


二、可变类型

1、列表
def changeList(List):
    List.append("add1")
    print("函数内:List = ", List)

#测试   
Li = ["ori1", "ori2", "ori3"]
print("调用前:Li = ", Li)
changeList(Li)
print("调用后:Li = ", Li)

代码结果:

调用前:Li = [‘ori1’, ‘ori2’, ‘ori3’]
函数内:List = [‘ori1’, ‘ori2’, ‘ori3’, ‘add1’]
调用后:Li = [‘ori1’, ‘ori2’, ‘ori3’, ‘add1’]


2、字典
def changeDict(Dictionary, key):
    Dictionary[key] = 19
    print("函数内:Dictionary = ", Dictionary)

#测试   
Dict = {"Name": "ZML", "Age": 20}
print("调用前:Dict = ", Dict)
changeDict(Dict, "Age")
print("调用后:Dict = ", Dict)

代码结果:

调用前:Dict = {‘Name’: ‘ZML’, ‘Age’: 20}
函数内:Dictionary = {‘Name’: ‘ZML’, ‘Age’: 19}
调用后:Dict = {‘Name’: ‘ZML’, ‘Age’: 19}


3、集合
def changeSet(Set):
    Set.add(6)
    print("函数内:Set = ", Set)

#测试   
s = {1, 2, 3, 2, 3, 4, 5}
print("调用前:s = ", s)
changeSet(s)
print("调用后:s = ", s)

代码结果:

调用前:s = {1, 2, 3, 4, 5}
函数内:Set = {1, 2, 3, 4, 5, 6}
调用后:s = {1, 2, 3, 4, 5, 6}


4、自定义类的实例
# 定义类
class MyClass:
    def __init__(self):
        self.x = 1
        self.y = 2


def changeInstance(myInstance):
    myInstance.x = 2
    myInstance.y = 3
    print("函数内:myInstance.x = ", myInstance.x, ",myInstance.y = ", myInstance.y)

#测试   
ins = MyClass()  #创建一个实例
print("调用前:ins.x = ", ins.x, ",ins.y = ", ins.y)
changeInstance(ins)
print("调用后:ins.x = ", ins.x, ",ins.y = ", ins.y)

代码结果:

调用前:ins.x = 1 ,ins.y = 2
函数内:myInstance.x = 2 ,myInstance.y = 3
调用后:ins.x = 2 ,ins.y = 3

以上就是个人理解的python函数中参数传递的问题,如果有错误,欢迎指出。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋之颂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值