繁体   English   中英

将字典作为关键字参数传递给函数

[英]Passing a dictionary to as keyword parameters to a function

我有一个计算销售额的函数:

def get_sales(
    sale_1: int,
    sale_2: int,
    sale_3: int,
    with_fees: bool = True,
) -> float:
    
    if with_fees is True:
        return (sale_1 + sale_2 + sale_3) * 0.95
    else:
        return (sale_1 + sale_2 + sale_3)

我还有一本名为sales_test的字典:

sales_test = {'sale_1': 100,
              'sale_2': 75,
              'sale_3': 92,
              'revenue_1' : 400,
              'revenue_2' : 219,
              'city' : 'London'
              }

我希望能够创建另一个名为advanced_sales的函数,该函数接受sales_test字典并返回get_sales输出:

def advanced_sales(
    sales_test: Dict[str, int],
    with_fees: bool = True,
) -> float:

    sales = get_sales(**sales_test)
    return sales

advanced_sales(sales_test)

期望的输出是: 253.64999999999998 (即100+75+92)

但是,我收到以下错误消息:

----> 6     sales = get_sales(**sales_test)
      7     return sales

TypeError: get_sales() got an unexpected keyword argument 'revenue_1'

任何解包sales_test字典的帮助将不胜感激。 谢谢!

您正在尝试传递函数无法接受的附加参数。 解决此问题的一种方法是:

import numpy as np
import pandas as pd

sales_test = {'sale_1': 100,
              'sale_2': 75,
              'sale_3': 92,
              'revenue_1' : 400,
              'revenue_2' : 219,
              'city' : 'London'
              }
              
def get_sales(
    
    with_fees: bool = True,**kwargs,
) -> float:
    sale_1,sale_2,sale_3=kwargs['sale_1'],kwargs['sale_2'],kwargs['sale_3']
    if with_fees is True:
        return (sale_1 + sale_2 + sale_3) * 0.95
    else:
        return (sale_1 + sale_2 + sale_3)

def advanced_sales(
    sales_test=None,
    with_fees: bool = True,
) -> float:

    sales = get_sales(**sales_test,with_fees=with_fees)
    return sales

print(advanced_sales(sales_test))

get_sales 仅接受 4 个参数,但您传递的参数太多,并且其中没有一个被命名为 income_1 等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM