Py学习  »  Python

在函数参数python中传递多个字典

spark dev • 4 年前 • 774 次点击  

我有一个函数,它以一个以上的字典作为参数。我一直收到以下消息,语法有问题:

SyntaxError: non-keyword arg after keyword arg

基本上,我的代码将遍历文件名列表中的每个项,并获取要在compare()函数上传递的每个项的文件大小。我在传递多个词典时遇到问题。每个字典有两个键,它们是文件名和文件大小。我的代码如下:

def compare(previous,current):

    tolerance = 0.4

    if previous is None and current is None:
        return " missing in both"

    if previous is None:
        return " new"

    if current is None:
        return " missing"

    size_ratio = float(current)/previous

    if size_ratio >= 1 + tolerance:
        return " %d%% bigger" % round(((size_ratio - 1) * 100),0)

    if size_ratio <= 1 - tolerance:
        return " %d%% smaller" % round(((1 - size_ratio) * 100),0)

    return " ok"


def compare_filesets(file_names, previous_data, current_data):


    for item in file_names:

     print (item + compare(previous_data.get('File Size'), current_data.get('File Size')) + "\n")



compare_filesets(file_names=['a.json', 'b.json', 'c.json'],
                 current_data= {"File Name": "a.json", "File Size": 1000}, {"File Name": "a.json", "File Size": 1000},
                 previous_data={"File Name": "a.json", "File Size": 1000}, {"File Name": "a.json", "File Size": 1000})
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49632
 
774 次点击  
文章 [ 1 ]  |  最新文章 4 年前
bruno desthuilliers
Reply   •   1 楼
bruno desthuilliers    5 年前

参数是单个对象,因此 func(arg1={}, {}) 不是将两个dict作为“arg1”传递,而是将一个dict作为(命名参数)“arg1”传递,将第二个dict作为位置参数传递,正如您注意到的,python禁止在命名参数之后传递位置参数(因为它不知道位置参数将匹配哪个参数)。

如果要将多个dict作为“previous_data”和“current_data”传递,则必须传递dict的集合(在这个cas中,列表是非常明显的选择),即:

somefunc(a=[{}, {}], b=[{}, {}])

现在这也意味着您必须(重新)以这样一种方式编写您的函数:它期望的是dict列表,而不是dict列表。