Python在函数内改变实参的值
在Python中,函数参数的传递方式是“传对象引用”,也就是说,函数接收的是参数对象的引用,而不是参数对象的值。这就意味着,在函数内部对参数的修改,可能会影响原始对象。本文将通过代码示例和类图、序列图来解释这一概念。
代码示例
假设我们有一个简单的类Person
,它有两个属性:name
和age
。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"Person(name={self.name}, age={self.age})"
现在我们定义一个函数increase_age
,它接收一个Person
对象,并将其年龄增加1。
def increase_age(person):
person.age += 1
我们创建一个Person
对象,并调用increase_age
函数。
p = Person("Alice", 30)
print("Before:", p)
increase_age(p)
print("After:", p)
输出结果如下:
Before: Person(name=Alice, age=30)
After: Person(name=Alice, age=31)
可以看到,虽然我们在函数内部修改了person.age
,但原始对象p
的age
属性也被改变了。
类图
以下是Person
类的类图:
classDiagram
class Person {
+name : str
+age : int
__init__(name : str, age : int)
__repr__() : str
}
序列图
以下是调用increase_age
函数的序列图:
sequenceDiagram
participant Alice as Person(name="Alice", age=30)
participant increase_age
Alice->>increase_age: increase_age(p)
increase_age->>Alice: age += 1
Alice->>Alice: age = 31
结论
在Python中,函数参数的传递方式是“传对象引用”,这意味着函数内部对参数的修改可能会影响原始对象。因此,在使用函数时,我们需要特别注意这一点,以避免意外的副作用。同时,这也为我们提供了一种灵活的方式来操作和修改对象。通过理解这一机制,我们可以更好地利用Python的函数和对象,编写出更加高效和优雅的代码。