簡體   English   中英

TypeError:'cmp'是此函數的無效關鍵字參數

[英]TypeError: 'cmp' is an invalid keyword argument for this function

我正在使用Python3,但腳本與此版本不兼容,我遇到了一些錯誤。 現在我有cmp參數的問題。 這是代碼

def my_cmp(x,y):
    counter = lambda x, items: reduce(lambda a,b:a+b, [list(x).count(xx) for xx in items])
    tmp =  cmp(counter(x, [2,3,4,5]), counter(y, [2,3,4,5]))
    return tmp if tmp!=0 else cmp(len(x),len(y)) 

for i, t in enumerate([tmp[0] for tmp in sorted(zip(tracks, self.mapping[idx][track_selection[-1]].iloc[0]), cmp=my_cmp, key=lambda x:x[1])]):
    img[i,:len(t)] = t

我真的很感激如何在Python3中處理這個錯誤。

您應該嘗試將cmp函數重寫為函數。 在這種情況下,看起來您只需返回一個元素的counter()函數輸出:

def my_key(elem):
    counter = lambda x, items: sum(list(x).count(xx) for xx in items)
    return counter(elem, [2, 3, 4, 5]), len(elem)

我冒昧地用sum()函數替換reduce(...)代碼,這是一個更加緊湊和可讀的方法來對一系列整數求和。

上面也將首先按counter()的輸出進行排序,並在綁定的情況下按每個已排序元素的長度進行排序。

然而, counter功能非常低效; 我在這里使用Counter()類代替:

from collections import Counter

def my_key(elem):
    counter = lambda x, items: sum(Counter(i for i in x if i in items).values())
    return counter(elem, {2, 3, 4, 5}), len(elem)

這個函數適用於Python 2和3:

sorted(zip(tracks, self.mapping[idx][track_selection[-1]].iloc[0]),
       key=lambda x: my_key(x[1]))

如果不能,可以使用cmp_to_key()實用程序函數來調整cmp參數,但考慮到這不是一個理想的解決方案(它會影響性能)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM