python函数参数为对象时,如何使用?

  • Post category:Python

当函数参数为对象时,在函数体内可以使用该对象的属性和方法。下面我们就来详细讲解一下如何使用。

1. 理解参数为对象

在Python中,一切皆对象。当我们将某个对象作为函数的参数传入时,实际上传入的是该对象的引用,也就是内存地址,而不是该对象本身的值。因此,在函数内部操作该参数时,实际上是在该对象的内存中进行操作,所以在函数内部修改该对象参数的值,也会影响函数外的该对象的值。

2. 使用对象参数的属性和方法

接下来我们看一下如何在函数中使用对象的属性和方法。以一个简单的例子,假设我们有一个名为Person的类,它有两个属性:name和age,有一个方法say_hello(),用于打招呼。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say_hello(self):
        print("Hello, my name is %s, and I'm %d years old" % (self.name, self.age))

现在我们来定义一个函数greet,它的参数是一个Person类型的对象。在函数中,我们可以通过该对象的属性和方法进行操作。下面是函数的代码实现:

def greet(person):
    person.say_hello()
    person.age += 1
    print("It's nice to meet you, %s" % person.name)

我们定义了一个greet函数,它接受一个Person类型的参数person。在函数中,我们使用Person对象的say_hello()方法打招呼,并修改该对象的age属性加1。最后,打印出“It’s nice to meet you, + name”这句话。

下面我们来测试一下函数:

person1 = Person("Tom", 20)
greet(person1)

输出结果为:

Hello, my name is Tom, and I'm 20 years old
It's nice to meet you, Tom

可以看到,我们成功地使用了Person对象的say_hello()方法,同时对该对象的age属性进行了修改。

3. 更多例子

除了上面的例子,我们来看看更复杂一点的例子。

假设有一个学生类Student,它有两个属性:name、age和course,有一个方法study(),用于打印出该学生正在学习的课程名称。我们定义一个函数learn(),它接受一个Student对象作为参数,并调用它的study()方法。之后,我们重新给该学生的course属性赋值为“Computer Science”。

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.course = ""

    def study(self):
        print("I'm studying %s." % self.course)

def learn(student):
    student.study()
    student.course = "Computer Science"

s1 = Student("Alice", 19)
learn(s1)
print(s1.course)

输出结果为:

I'm studying .
Computer Science

我们调用了learn()函数,将s1作为参数传入。在函数内部,我们调用了其study()方法,输出结果为空。之后,我们将其course属性赋值为“Computer Science”。在函数外部,再次输出s1的course属性值,我们可以看到,其值已经被更改。

上面的例子展示了如何在函数中改变对象属性的值。由此可见,当函数参数为对象时,如果对该参数进行修改,那么原对象的值也会被修改。同时,在函数中可以访问该对象的属性和方法。