假设我们有一个函数,它从字典中取出参数值。我应该包括所有单个参数还是仅包括整个字典作为参数?
下面是一个简单的例子:
customer_orders = [{"ID": 1, "PRICE": 20, "QUANTITY": 2, "IN_STOCK": "YES"},
{....}]
# Way 1
def get_total(price, quantity):
total = price * quantity
return total
price = customer_orders[0]["PRICE"]
quantity = customer_orders[0]["QUANTITY"]
order_total = get_total(price, quantity)
# Way 2
def get_total(customer_order):
price = customer_order["PRICE"]
quantity = customer_order["QUANTITY"]
total = price * quantity
return total
order_total = get_total(customer_orders[0])
答案 0 :(得分:1)
我为Way 2
投票,因为它隐藏了你职能中的更多工作。这使您的主代码更清晰,更容易理解。该函数更复杂,但如果它命名良好(在这种情况下),这使它更容易理解。
+1注意到这是一个风格问题。
答案 1 :(得分:0)
完全避免这个问题,不要在这里使用简单的词典。相反,使用一个类 - namedtuple
非常适合这里,但是将其子类化,以便您可以添加total
作为属性:
from collections import namedtuple
ordertuple = namedtuple('Order', ['ID', 'PRICE', 'QUANTITY', 'IN_STOCK'])
class CustomerOrder(ordertuple):
@property
def total(self):
return self.PRICE * self.QUANTITY
all-caps属性名称很难看,但如果它们与您已有的字典键匹配,您可以将dicts列表转换为namedtuples
列表,如下所示:
customer_orders = [CustomerOrder(**order) for order in customer_orders]
根据您首先获得这些词典的方式,您可以在此时创建名称语句,并使用属性的普通小写约定。
答案 2 :(得分:0)
这是另一种可能性,虽然我不知道它是否更好:
# Way 3
def get_total(PRICE, QUANTITY, **customer_order):
total = PRICE * QUANTITY
return total
get_total(**customer_orders[0])