Разве более питонно использовать меньше строк кода? - PullRequest
0 голосов
/ 16 октября 2018

Я нашел два способа сделать то же самое, и мне интересно, что лучше и почему.

Вход = вес почтового пакета

Выход = самый дешевый способ доставки и цена какстрока

Методы, приведенные ниже, принимают 1 аргумент "weight" и предназначены для сравнения цен "Ground", "Drone" и "Premium", а затем возвращают строку, которая дает самый дешевый способ доставки и цену.(Ранее в программе методы определялись для "ground_rate (weight)" и "drone_rate (weight)" ... prem_groud_rate - постоянное значение с плавающей запятой.)

Первый способ использует словарь:

def shipping_method_determiner(weight):
  prices = {"Ground": ground_rate(weight), "Drone": drone_rate(weight), "Premium" : prem_ground_rate}
  cheapest_method = (list(prices.keys())[list(prices.values()).index(sorted(prices.values())[0])])
  return (("%s is the cheapest method.\n\n" % cheapest_method) + ("The total cost will be %.2f.\n" % sorted(prices.values())[0]))

Второй способ заканчивается списком кортежей:

def shipping_method_determiner(weight):
  method_list = ["Ground", "Drone", "Premium"]
  price_list = [ground_rate(weight), drone_rate(weight), prem_ground_rate]
  min_price = min(price_list)
  method_with_price = list(zip(method_list, price_list))
  best_method = (method_with_price[price_list.index(min_price)][0])
  return "%s is the cheapest method.\n\nThe total cost will be %.2f \n" % (best_method, min_price)

Первый способ использует только 4 строки, но его труднее читать.Второй способ легче читать, но почти в два раза больше строк.Всегда ли более питонично стремиться к удобочитаемости в меньшем количестве строк?Любые другие способы определить этот метод и получить тот же результат?Было бы лучше как-то использовать .format () вместо форматирования строк?

Спасибо всем вам, умные люди!

1 Ответ

0 голосов
/ 16 октября 2018

Как я уже писал в комментарии выше, более короткий код не обязательно означает более питонный код.Простота, удобочитаемость и ремонтопригодность должны быть основными критериями при принятии решения о том, какую версию кода сохранять.Что касается вашей конкретной проблемы, думаю, я бы пошел с чем-то вроде:

def shipping_method_determiner(weight):
  prices = {
    "Ground": ground_rate(weight),
    "Drone": drone_rate(weight),
    "Premium": prem_ground_rate,
  }
  best_method, min_price = min(prices.items(), key=lambda item: item[1])
  return "%s is the cheapest method.\n\nThe total cost will be %.2f \n" % (best_method, min_price)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...