使用** kwargs

时间:2016-01-27 20:48:21

标签: python

在我的练习中,我必须使用**kwargs按字母顺序打印在我的函数中输入的参数。

以下是我现在所拥有的:

def afficher(**kwargs):
if kwargs is not None:
    for i in kwargs:
        print (i)

afficher(helpme=7,plz=10)

返回:

plz
helpme

我担心的是:

  • 我希望他们按字母顺序返回
  • 我希望他们返回:

    helpme = 7

    plz = 10

提前致谢!

2 个答案:

答案 0 :(得分:0)

普通词典没有排序,因为它们的键经过哈希处理并最终存储起来。

在您的情况下,您可以扫描kwargs词典

的排序键
for i in sorted(kwargs):

所以代码变成了

def afficher(**kwargs):
    for i in sorted(kwargs):
        print ('{}={}'.format(i,kwargs[i]))

afficher(helpme=7,plz=10)
总是产生

helpme=7
plz=10

注意:正如您所看到的,我删除了if,我认为您插入了kwargs以检查是否有任何关键字参数传递给该函数。 在这种情况下,{}将是一个空字典None,而不是server { listen 80; location / { include proxy_params; proxy_pass http://unix:/tmp/flasky.sock; } ,因此无需阻止迭代。

答案 1 :(得分:0)

当您将**something作为函数参数时,函数体something内部将dict将关键字映射到其值。

要遍历已排序的键,您将执行以下操作:

def afficher(**kwargs):
    for k,v in sorted(kwargs.items()):
        print '{}={}'.format(k,v)

请注意,如果没有传递关键字参数,kwargs={}kwards.items()=[]for循环将立即退出,因此没有理由进行检查。另外,由于if kwargs is None不是{},因此您无法使用None进行检查。您可以使用{}进行检查。