欢迎访问宙启技术站
智能推送

Python函数参数传递的不同方法及区别。

发布时间:2023-06-08 08:46:17

Python函数参数传递的不同方法及区别

在Python中,函数参数传递的方式有多种,包括传值、传引用、传对象等。本文将分别介绍这些参数传递方式的特点和使用方法,并且对它们进行比较。

传值方式

在Python中,函数参数传递时,使用传值方式。传值就是将实际参数的值复制给形式参数,两者之间互不干扰。例如:

def func(x):
    x = x + 1
    print(x)
    
y = 2
func(y)
print(y)

上述代码中,我们定义了一个函数func,它接收一个参数x,并将x加1后输出。接着,我们定义了一个变量y,并将其赋值为2。然后,我们调用了func函数,并将变量y传递给x。最后,我们输出了变量y的值。

运行上述代码,结果为:

3
2

可以看到,函数内部的x变量被加1后输出为3,但是函数外部的变量y的值没有改变,依然为2。这是因为在函数调用时,y的值被复制给了x,而函数内部对x的修改不会影响y的值。

传引用方式

在Python中,有些数据类型(如list、dict)是可变的,即它们的值可以被修改。对于这些可变数据类型,我们可以采用传引用方式来传递参数。传引用就是将实际参数的引用(即地址)复制给形式参数,因此两者指向同一块内存,对形式参数的修改会影响实际参数。例如:

def func(x):
    x.append(4)
    print(x)
    
y = [1, 2, 3]
func(y)
print(y)

上述代码中,我们定义了一个函数func,它接收一个参数x,并将数值4添加到x中。接着,我们定义了一个列表y,并将其赋值为[1,2,3]。然后,我们调用了func函数,并将列表y传递给x。最后,我们输出了列表y的值。

运行上述代码,结果为:

[1, 2, 3, 4]
[1, 2, 3, 4]

可以看到,函数内部对x的修改同样影响了函数外部的变量y。

通过上面这个例子,也可以得出一些结论:

1. 传引用方式只适用于可变数据类型。

2. 在传引用方式下,对形式参数的修改会影响实际参数。

3. 当传引用类型的参数同时传递给两个及以上的函数时,如果某个函数修改了它的值,那么它在别的函数中的值也会受到影响。

传对象方式

在Python中,一切都是对象。因此,我们也可以通过传对象方式来传递参数。传对象就是传递对象的引用(地址),通过这个引用可以访问和修改对象的属性和方法。例如:

class A:
    def __init__(self, value):
        self.value = value
    
    def func(self):
        self.value += 1
        print(self.value)
        
def func2(x):
    x.func()
    
a = A(2)
func2(a)
print(a.value)

上述代码中,我们先定义了一个A类,它有一个属性value和一个方法func,func方法将value加1并输出。接着,我们定义了一个函数func2,它接收一个参数x,并调用x的func方法。然后,我们创建了一个A的实例a,并将其value设为2。最后,我们调用func2函数,并将实例a传递给x。最后,我们输出实例a的value属性的值。

运行上述代码,结果为:

3
3

可以看到,实例a的value属性被成功修改为3,并且在函数调用后仍然保持不变。

通过上面这个例子,也可以得出一些结论:

1. 在传对象方式下,传递的是对象的引用。

2. 通过这个引用可以访问和修改对象的属性和方法。

3. 对象不仅包含属性,还包含方法。

4. 对象可以是不可变数据类型(如int、float)或者可变数据类型(如list、dict)。

总结

在Python中,函数参数传递的方式有传值方式、传引用方式、传对象方式三种。传值方式适用于不可变数据类型,不会影响实际参数的值。传引用方式适用于可变数据类型,对形式参数的修改会影响实际参数的值。传对象方式适用于各种类型的数据,通过这种方式传递参数可以访问和修改对象的属性和方法。需要根据实际情况选择合适的参数传递方式。