簡體   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