函数在Python中返回自身引用
下面这个在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()