Python中函数加括号和不加括号的区别

先说结论,再举实例验证。

结论:
在Python中,

函数加括号是指对此函数的调用,

函数不加括号是指调用函数本身(的内存地址),也可以理解成对函数重命名(希望这对你理解两者的区别有所帮助,如果你觉得没有帮助那就忽略此段逗号后面的内容)。

举个栗子。可能比较长,但耐心看的话你一定会有收获,不单单局限于题目问题本身。

我在自学《Python编程从入门到实践》第9章进行代码复写时,导入类这块一直无法得到自己想要的结果,如下所示:

from car import Car

my_new_car = Car(‘audi’, ‘a4’, 2016)
print(my_new_car.get_descriptive_name)
my_new_car.odometer_reading = 23
my_new_car.read_odometer()

输出结果

<bound method Car.get_descriptive_name of <car.Car object at 0x000002EAB6F7EF60>>
This car has 23 miles on it.

第一行<bound method …>是什么意思?后来才知道后面那一串其实就是函数的内存地址,但当时网上没找到类似问题的回答,只是在搜索答案的过程模糊意识到可能跟我编写的类,也就是import的对象Car的方法有关。于是开始翻看Car的源代码,发现get_descriptive_name这个函数的代码如下所示:

def get_descriptive_name(self):
        """返回整洁的描述性信息"""
        long_name = str(self.year) + " " + self.make + " " + self.model
        return long_name.title()

你会发现,这个函数只有代表它自身的形参,也就是说在调用该函数的时候是无法传参的。可是,这个发现对解决题目问题似乎没有帮助。

不过,也正是借助这个发现,我认识到是自己在调用此函数时没有在后面加括号。因为我是要调用此函数的方法,结果没有加括号让Python以为我要调用函数本身。经过更正后,如下所示:

from car import Car

my_new_car = Car(‘audi’, ‘a4’, 2016)
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading = 23
my_new_car.read_odometer()

输出结果:


2016 Audi A4
This car has 23 miles on it.
发布了14 篇原创文章 · 获赞 0 · 访问量 2483

猜你喜欢

转载自blog.csdn.net/weixin_44232308/article/details/103734955
今日推荐