Функция, возвращающая ссылку на себя Python

Имеет ли следующее применение в Python?

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

Или даже:

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

Это обычная практика, возможно, не столько с функциями, сколько широко используемая в ООП. В принципе, всякий раз, когда вы не используете getter (метод, возвращающий свойства объекта) или возвращающий что-то конкретное, нет никакой стоимости для возврата самого объекта. Но он позволяет сжимать код, как в

 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()