编辑
似乎我最初的问题是有缺陷的;我把key
和cmp
混淆了,正如KillianDS和jornsharpe所指出的那样。将cpm
与我的类callable一起使用,效果如预期。你知道吗
我接受了jornsharpe的答案,因为这是一个更正确的答案“如何用数据来播种函数”。你知道吗
原始问题
在传递函数以与Python的sorted(list, key=comp)
函数一起使用之前,是否可以使用数据对函数进行预种子设定?你知道吗
我试过创建一个可调用的类,比如:
class MyComp(object):
def __init__(self, data):
self.data = data
def __call__(self, a, b):
# compares `a` with `b`, optionally using `data`
sortfunc = MyComp(True)
sorted(mylist, key=sortfunc)
但是,当我尝试这个方法时,我得到一个TypeError
:
TypeError: __call__() takes exactly 3 arguments (2 given)
我还尝试了一个包装函数:
def my_comp(data):
def comp(a, b):
...
return comp
sortfunc = my_comp(True)
sorted(mylist, key=sortfunc)
但是这也会在TypeError
中失败,尽管不同的是:
TypeError: comp() takes exactly 2 arguments (1 given)
有什么办法能达到我想要的结果吗?你知道吗
在一般情况下,要定义调用函数时传递给函数的一些参数,可以使用^{} :
在这种情况下,请记住
key
的sorted
仅使用单个参数调用-使用key
为mylist
中的每个项生成一个值,然后根据这些值对列表进行排序。它不是用成对的项来调用的;这是cmp
(参见the docs)。你知道吗相关问题 更多 >
编程相关推荐