函数在Python中返回自身引用

3 投票
1 回答
5883 浏览
提问于 2025-04-18 07:04

下面这个在Python中有什么实际用途吗?

>>> def a(n):
        print(n)
        return a

或者甚至:

>>> def a(n):
        print(n)
        return b
>>> def b(n):
        print(n+3)
        return a

1 个回答

2

这是一种常见的做法,虽然在函数中不太常见,但在面向对象编程(OOP)中非常普遍。基本上,当你不使用获取器(就是返回对象属性的方法)或者不返回特定的东西时,返回对象本身是没有什么成本的。但这样做可以让代码更简洁,比如说:

house = House()
exits = house.setDoors(2).setWindows(4).getNumberOfEmergencyExitsRequired()

而如果不这样写,你就得写成:

house = House()
house.setDoors(2)
house.setWindows(4)
exits = house.getNumberOfEmergencyExistsRequired()

这并不是世界末日,但这样可以让代码更简洁,同时又不影响可读性,所以这是个不错的做法。

关于你的例子

第一个例子很简单,和上面说的一样,它让代码更简洁。第二个例子其实我个人不太会这样做,因为

a(3)(5) == a(3); b(5)

在这个简单的例子中,没有理由让它这样运行,可能会让人感到困惑。

回到面向对象编程

无论如何,在面向对象编程中,你当然可以想象

class House(object):
    def addDoorByColor(self, doorColor):
        door = new Door()
        door.setColor(doorColor)
        self.door = door
        return self.door

那么

house = House(); 
house.addDoorByColor('red').open()

会“打开门”。这可能不是这个场景下最好的例子,但我现在想到了这个,想展示一下返回“其他对象”的潜在用法。不过,最后这种情况可能更适合用

door = new Door('red')
house.addDoor(door)
door.open()

撰写回答