当我使用带有排序函数的operator.itemgetter时,为什么PyCharm检查器会显示类型警告?

时间:2018-04-02 03:56:13

标签: python pycharm

考虑以下简单的Python代码:

from operator import itemgetter


def main():

    my_list = [
        ('Bob', 'RnD', 10),
        ('John', 'RnD', 11),
        ('Mary', 'Sales', 10),
        ('Linda', 'Sales', 11),
    ]
    # I saw a lot of examples tell people to do multi-fields sorting like this, but 
    # PyCharm inspector warns it
    print(sorted(my_list, key=itemgetter(1, 2), reverse=True))
    # I read some articles and found that the following code works, too, without warning.
    print(sorted(my_list, key=(lambda x: (x[1], x[2])), reverse=True))


if __name__ == '__main__':
    main()

对于第"行(sorted(my_list,key = itemgetter(1,2),reverse = True))",PyCharm显示以下警告:

  

预期类型'(元组[str,str,int]) - >任何' (匹配的通用类型'(_ T) - >任何'),得到' itemgetter'而是更多...(Ctrl + F1)

当我点击“更多”时,会显示:

  

预期类型'(元组[str,str,int]) - >任何' (匹配的通用类型   '(_ T) - >任何'),得到' itemgetter'而是更少...(Ctrl + F1)

     

此检查检测函数调用表达式中的类型错误。应有   动态调度和鸭子打字,这是有限的但可能   有用的案件数量。可以指定函数参数的类型   在docstrings或Python 3函数注释中。

enter image description here

两个代码(itemgetter和lambda)都运行良好,只是代码检查警告。

所以我的问题是:

  • 为什么PyCharm检查员会用此警告我?
  • 是否值得修复?以及如何使用itemgetter修复它?
  • 我应该为我的所有项目压制这样的警告吗?
  • 我是否总是使用下一行(使用lambda语句)进行此类排序?

0 个答案:

没有答案