最近在学习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函数中参数传递的问题,如果有错误,欢迎指出。