考虑以下简单的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函数注释中。
两个代码(itemgetter和lambda)都运行良好,只是代码检查警告。
所以我的问题是: