如何将定义的字典传递给 Python 中的 **kwargs?

Posted

技术标签:

【中文标题】如何将定义的字典传递给 Python 中的 **kwargs?【英文标题】:How can I pass a defined dictionary to **kwargs in Python? 【发布时间】:2019-01-16 00:40:46 【问题描述】:

这是我第一次在这里发帖。希望我能得到好的建议:) 我学会了如何将**kwargs*args 都传递给一个函数,并且效果很好,如下所示:

def market_prices(name, **kwargs):
     print("Hello! Welcome to "+name+" Market!")
     for fruit, price in kwargs.items():
         price_list = "  is NTD  per piece.".format(fruit,price)
         print (price_list) 
market_prices('Wellcome',banana=8, apple=10)

但是在实际情况下,我宁愿预先定义一个包含很多键和值的字典,这样我就不必在调用我的函数时输入每个参数。我在网上搜索过,但找不到很好的例子或解释:/ 你能给我一些建议吗?这是我尝试使用的代码:

fruits:"apple":10,
       "banana":8,
       "pineapple":50,
       "mango":45
       

def market_prices(name, **fruits):
    print("Hello! Welcome to "+name+" Market!")
    for fruit, price in fruits.items():
        price_list = "  is NTD  per piece.".format(fruit,price)
        print (price_list)

market_prices('Wellcome ', fruits)

NameError: name 'fruits' 未定义

非常感谢!:)

【问题讨论】:

【参考方案1】:

您在定义fruits 时有错字。应该是这样的

fruits = "apple":10,
       "banana":8,
       "pineapple":50,
       "mango":45
       

【讨论】:

请注意,在 Python 3.6 之前,这会显示为语法错误。现在,它只是一个看起来很奇怪的变量注释。【参考方案2】:

在 fruits 参数之前使用**

fruits="apple":10,
       "banana":8,
       "pineapple":50,
       "mango":45
       

def market_prices(name, **fruits):
    print("Hello! Welcome to "+name+" Market!")
    for fruit, price in fruits.items():
        price_list = "  is NTD  per piece.".format(fruit,price)
        print (price_list)

market_prices('Wellcome ', **fruits) #Use **before arguments

【讨论】:

非常感谢!我发现它在有和没有**时都有效【参考方案3】:

有4种可能的情况:

您使用命名参数调用函数,并且希望在函数中使用命名变量: (注意默认值)

def buy(orange=2, apple=3):
    print('orange: ', orange)
    print('apple: ', apple)

buy(apple=4)
# orange:  2
# apple:  4

您使用 命名参数 调用该函数,但您希望函数中有 字典: 然后在函数定义中使用**dictionaryname来收集传入的参数

def buy(**shoppinglist):
    for name, qty in shoppinglist.items():
        print(': '.format(name, qty) )

buy(apple=4, banana=5)
# banana: 5
# apple: 4

您通过 字典 调用函数,但希望在函数中使用 命名变量: 调用函数解包字典时使用**dictionaryname

def buy(icecream=1, apple=3, egg=1):
    print('icecream:', icecream)
    print('apple:', apple)
    print('egg:', egg)

shoppinglist = 'icecream':5, 'apple':1
buy(**shoppinglist)
# icecream: 5
# apple: 1
# egg: 1

您调用传递字典的函数,并且希望在函数中包含字典: 只是通过字典

def buy(shoppinglist):
    for name, qty in shoppinglist.items():
        print(': '.format(name, qty) )

shoppinglist = 'egg':45, 'apple':1
buy(shoppinglist)
# egg: 45
# apple: 1

【讨论】:

这太有帮助了:))谢谢你清楚地澄清它!【参考方案4】:

感谢你们快速而有用的评论!在这里我尝试了一些,它的工作原理! 在定义函数时,如果你把**作为你的参数,那么在调用它的时候一定要把它也放上去!否则,两者都不放! 1.带**

fruits="apple":10,
       "banana":8,
       "pineapple":50,
       "mango":45
       

    def market_prices(name, **fruits):
        print("Hello! Welcome to "+name+" Market!")
        for fruit, price in fruits.items():
            price_list = "  is NTD  per piece.".format(fruit,price)
            print (price_list)

    market_prices('Wellcome ', **fruits)

2.没有** 水果=“苹果”:10, “香蕉”:8, “菠萝”:50, “芒果”:45

def market_prices(name, fruits):
    print("Hello! Welcome to "+name+" Market!")
    for fruit, price in fruits.items():
        price_list = "  is NTD  per piece.".format(fruit,price)
        print (price_list)

market_prices('Wellcome ', fruits)

问题解决了:))xoxo

【讨论】:

以上是关于如何将定义的字典传递给 Python 中的 **kwargs?的主要内容,如果未能解决你的问题,请参考以下文章

Python最小化函数:将附加参数传递给约束字典

将参数作为字典传递给 add_argument

Python:如何将 def 中的参数传递给 pandas loc 中的输入?

如何将字典传递给带有关键字参数的函数?

Sklearn Pipeline:将参数传递给自定义变压器?

通过 add_job_flow_steps 将嵌套字典传递给 EMR