我想出了两种方法来做同一件事,并且想知道哪种更好,为什么呢。
输入=邮政包裹重量
输出=最便宜的运输方式和价格(字符串)
以下方法采用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行,但似乎很难阅读。第二种方法更易于阅读,但几乎是行数的两倍。在更少的行上获得可读性总是不是更pythonic?还有其他方法可以定义此方法并获得相同的结果吗?以某种方式使用.format()代替字符串格式会更好吗?
谢谢你,所有聪明的人!
答案 0 :(得分:2)
正如我在上面的评论中所写,较短的代码不一定能带来更多的pythonic代码。简单性,可读性和可维护性应该是决定保留哪个版本的代码的主要标准。关于您的特定问题,我想我会喜欢以下内容:
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)