2017-10-21 91 views
0

家伙是我的字典生成代码:类型错误:group_by_retval()失踪1人需要的关键字只有一个参数:“grouper_func”下面

import collections 
from typing import Callable 

def group_by_retval(*args, grouper_func: Callable[[], None]): 
    my_list = [] 
    for elem in args: 
     my_tr = grouper_func(elem) 
     my_list.append([my_tr,elem]) 
    my_tuple = tuple(tuple(elem) for elem in my_list) 
    my_diction = collections.defaultdict(list) 
    for k,v in my_tuple: 
     my_diction[k].append(v) 
    return my_diction 

我从Python的官方文档阅读,我可以后宣布赎回功能* ARGS。如上。但是,当我运行下面的简单示例时,出现错误。有人可以帮我解决这个问题。感谢您阅读:

l = ["ab", 12, "cd", "d", 3] 


print(group_by_retval(l, lambda x: isinstance(x, str))) 
+0

后完整的错误回溯 – kvorobiev

+0

'group_by_retval(L,grouper_func =拉姆达X:isinstance(X,STR))' – vaultah

+0

@kvorobiev回溯(最近通话最后一个) : 文件 “testm.py”,第20行,在 打印(group_by_retval(升,λ-X:isinstance(X,STR))) 类型错误:group_by_retval()缺少1所需关键字唯一的参数: 'grouper_func' –

回答

1

正如评论所说,后*arg(任意参数列表),你可以只使用keyword arguments

group_by_retval(l, grouper_func=lambda x: isinstance(x, str)) 

做不提供,你可以换参数的名称:

def group_by_retval(grouper_func: Callable[[], None], *args): 
... 

print(group_by_retval(lambda x: isinstance(x, str), l)) 

输出:

defaultdict(<class 'list'>, {False: [['ab', 12, 'cd', 'd', 3]]}) 

但事实上,你只是不需要使用任意参数列表,因为你的第一个参数是list。正确的解决方案

def group_by_retval(args, grouper_func: Callable[[], None]): 
... 
print(group_by_retval(l, lambda x: isinstance(x, str))) 

输出:

defaultdict(<class 'list'>, {False: [12, 3], True: ['ab', 'cd', 'd']}) 
相关问题