TypeError: group_by_retval() missing 1 required keyword-only argument: 'grouper_func'
TypeError: group_by_retval() missing 1 required keyword-only argument: '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)))
如评论中所述,在 *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']})
下面是我的字典生成代码:
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)))
如评论中所述,在 *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']})