Why does Pycharm's inspector complain about “d = {}”?
当使用
This dictionary creation could be rewritten as a dictionary literal.
如果我重写了它,警告就会消失。由于
这个相关的问题似乎得出结论,选择只是风格/偏好的问题:"d=dict()"和"d="之间的差异
为什么Pycharm会抱怨
更新:
麦克把它钉牢了。警告实际应用于多行,而不仅仅是标记的行。
pycharm似乎在寻找一系列连续语句,在这些语句中初始化字典,然后在字典中设置值。例如,这将触发警告:
1 2 | d = {} d['a'] = 1 |
但此代码不会:
1 2 3 | d = {} pass d['a'] = 1 |
您的字典声明中的以下代码是什么?
我认为如果你有以下情况,Pycharm会触发错误:
1 2 | dic = {} dic['aaa'] = 5 |
就像你写的那样
1 | dic = {'aaa': 5} |
顺便说一句:如果使用函数,错误就会消失,这并不意味着pycharm相信
1 2 | dic = dict() dic['aaa'] = 5 |
嗯!
这可以在项目设置或默认设置中禁用。
- 导航到设置->检查->python
- 取消选中"字典文字可以重写字典创建"
对于那些喜欢(和我一样)用一个操作初始化字典的人
1 2 3 4 5 | d = { 'a': 12, 'b': 'foo', 'c': 'bar' } |
而不是像
1 2 3 | d = dict() d['a'] = 12 d['b'] = .... |
最后我得到了这样的结果:
1 2 3 4 5 6 | d = dict() d.update({ 'a': 12, 'b': 'foo', 'c': 'bar' }) |
Pycharm对此没有抱怨
我有一种情况,这种警告正折磨着我。在我的例子中,我将我的dict部分填充为文本,部分填充为函数输出的元组,如下所示:
1 2 3 4 5 6 7 8 | def get_other_values(): return 3, 4 foo = { "a": 1, "b": 2 } foo["c"], foo["d"] = get_other_values() |
所以,除非我为get_other_值的输出创建临时变量,否则pep8会生成这个警告,即使我正在用文本创建dict。我不能在文本中指定C和D键,因为这些值是作为元组输出的。
1 2 3 4 | mydict = { a: 5, b:z+c/2 } |
字典可以直接创建,而不需要先初始化它们,然后重新分配新值。