假设我们有一个函数,它接受字典中的参数值。我应该把所有的参数都包括进去,还是只把整个字典作为一个参数?
下面是一个简单的例子:
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])发布于 2015-10-12 01:43:42
我投票支持Way 2,因为它隐藏了函数中更多的工作。这使您的主要代码更简洁,更容易理解。这个函数更复杂,但是如果它命名得很好(在本例中就是这样),这将使它更容易理解。
注意到这是一个风格问题。
发布于 2015-10-12 01:50:22
这里不使用普通字典,完全避免这个问题。相反,在这里使用一个类--一个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所有大写的属性名称都很难看,但是如果它们与您已经拥有的字典键匹配,则可以将迪克列表转换为如下所示的namedtuples列表:
customer_orders = [CustomerOrder(**order) for order in customer_orders]根据首先如何获得这些字典,您可能可以在此时创建名称元组,并对属性使用正常的小写约定。
发布于 2015-10-12 01:58:00
还有一种可能性,尽管我不知道这样做是否更好:
# Way 3
def get_total(PRICE, QUANTITY, **customer_order):
total = PRICE * QUANTITY
return total
get_total(**customer_orders[0])https://stackoverflow.com/questions/33071984
复制相似问题