наилучшая практика для передачи значений между функциями в Python

Что такое наилучшая практика pythonic, позволяющая одной функции использовать возвращаемые значения другой функции? например, лучше ли вызывать одну функцию внутри другой или лучше, чтобы функция 1 возвращалась к классу, и назначаются переменные класса, которые затем используются функцией2? Во-вторых, сколько разных способов вы могли бы передавать значения между функциями?

class adding: def get_values(self): x = input("input x") y = input("input y") z = input("input z") return x, y, z def use_values(self, x, y, z): print x+y+z if name == 'main': dave = adding() x, y, z = dave.get_values() dave.use_values(x, y, z) 

Или

  dave = adding() dave.use_values(*dave.get_values()) 

3 Solutions collect form web for “наилучшая практика для передачи значений между функциями в Python”

В качестве import this скажет: «явный лучше, чем неявный»; так что идите с первой формой.

Если число возвращаемых значений становится большим, пусть use_value принимает аргумент последовательности.

Все пути действительны и полностью зависят от вашей предметной области и от компартиментализации функциональности, разделения проблем. Другими словами, это зависит .

Например, у вас может быть класс, открытый API-интерфейс которого имеет 2 метода, которые зависят от третьего метода, который вы считаете приватным. Это ваш выбор в качестве разработчика, чтобы не сделать этот третий метод частью публичного API, но он присутствует в вашем исходном коде:

 class FooAPI(object): def publicMethodOne(*args, **kw): return self._privateMethod(1, *args, **kw) + 7 def publicMethodTwo(*args, **kw): return self._privateMethod(2, *args, **kw) + 11 def _privateMethod(somevalue, *args, **kw): return somevalue * 3 

В этом случае пользователям API вашего API абсолютно не нужно напрямую обращаться к _privateMethod и передавать его возвращаемое значение в publicMethod .

Однако, если вы считаете, что потребители вашего API должны предоставить вашему методу определенную информацию, для которой есть простой метод по умолчанию, который мог бы рассчитать для них определенную информацию в большинстве случаев, вы хотели бы передать возвращаемое значение этого метода по умолчанию , Таким образом, эти потребители могут также использовать свой собственный метод расчета и использовать эти значения:

 def publicMethod(value1, value2): return value1 / value2 def mostCommonValues(): return (1.0, 4.0) publicMethod(*mostCommonValues()) publicMethod(4, 2) 

А когда использовать переменные экземпляра? Только когда возвращаемые значения функции сохраняются с экземпляром, когда они отражают внутреннее состояние этого экземпляра.

Например, если ваш класс представляет автомобиль, для вашего приложения может иметь смысл хранить местоположение автомобиля между операциями на этом автомобиле. Поэтому, если вы хотите узнать, нужно ли сейчас останавливаться на светофоре, updatePosition() метод updatePosition() , а затем используйте другой метод для вычисления расстояния от светофора. Вы не будете передавать вывод updatePosition() методу вычисления расстояния, вы просто сохраните позицию, обновленную в экземпляре.

Если, однако, вам необходимо обновить положение автомобиля при столкновении, вам нужно будет взять данные из автомобиля (на основе возвращаемых значений из методов, вызванных автомобилем), в сочетании с внешней информацией (положение другого объекта, сопротивление поверхности дороги и т. д.), чтобы вернуться к методу updatePosition на автомобиле. Поскольку теперь вам нужно добавить дополнительную информацию извне экземпляра автомобиля, вам придется передать значения из одного вызова метода другому через ваш общедоступный API.

Помните, что разработка программного обеспечения скорее является искусством, чем строгой технической дисциплиной, и поэтому ответ на вопрос о том, как это сделать, варьируется от разработчика к разработчику и от программного проекта до программного проекта. Ни одного ответа никто не отвечает. Просто попробуйте сделать это явным и очевидным, естественным.

Я бы сказал, что get_values не является важной частью добавления, и поэтому должна быть отдельной функцией. Если это так, я бы сказал:

 class adding: def get_values(self): self.x = input("input x") self.y = input("input y") self.z = input("input z") def use_values(self): print self.x+self.y+self.z if name == 'main': dave = adding() dave.get_values() dave.use_values() 

является более надежным решением.

Python - лучший язык программирования в мире.