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

如何将已定义的字典传递给Python中的**kwargs?,python,function,dictionary,keyword-argument,Python,Function,Dictionary,Keyword Argument,这是我第一次在这里发帖。希望我能得到好的建议:) 我学习了如何将**kwargs和*args传递到函数中,它运行得非常好,如下所示: def market_prices(name, **kwargs): print("Hello! Welcome to "+name+" Market!") for fruit, price in kwargs.items(): price_list = " {} is NTD

这是我第一次在这里发帖。希望我能得到好的建议:) 我学习了如何将
**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:未定义名称“水果”


非常感谢!:)

您的输入错误定义了
水果
。应该是这样的

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

在参数前使用
**

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

有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
调用传递字典的函数时,需要在函数中调用字典:
把字典递给我就行了

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

谢谢你们的快速和有用的评论!在这里,我尝试了一些,它的工作! 在定义函数时,如果您将**作为参数,那么在调用它时一定要将它也放进去!否则,两个都不放! 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 }


问题已解决:))xoxo

注意,在Python 3.6之前,这会显示为语法错误。现在,它只是一个看起来很奇怪的变量注释。非常感谢!我发现它在有和没有**的情况下都能工作**这非常有用:))谢谢你清楚地解释它!