用于列表、字典等的 Python“最佳格式化实践”
Posted
技术标签:
【中文标题】用于列表、字典等的 Python“最佳格式化实践”【英文标题】:Python "best formatting practice" for lists, dictionary, etc 【发布时间】:2011-04-28 11:39:39 【问题描述】:我一直在查看 Python 文档以了解大型列表和字典的代码格式化最佳实践,例如,
something = 'foo' : 'bar', 'foo2' : 'bar2', 'foo3' : 'bar3'..... 200 chars wide, etc..
或
something = 'foo' : 'bar',
'foo2' : 'bar2',
'foo3' : 'bar3',
...
或
something =
'foo' : 'bar',
'foo2' : 'bar2',
'foo3' : 'bar3',
...
如何处理列表/字典的深度嵌套?
【问题讨论】:
【参考方案1】:我的首选方式是:
something = 'foo': 'bar',
'foo2': 'bar2',
'foo3': 'bar3',
...
'fooN': 'barN'
【讨论】:
对 git 不太友好,因为在第一行或最后一行更改键/值会将其他语法元素拉入变更集中。 嵌套字典怎么样?【参考方案2】:aaronasterling 的缩进风格是我喜欢的。 another SO Question 中解释了这种风格以及其他几种风格。尤其是 Lennart Regebro 的回答给出了很好的概述。
但这种风格是投票最多的风格:
my_dictionary =
1: 'something',
2: 'some other thing',
【讨论】:
我特别喜欢 python 允许您使用逗号跟随字典、列表或元组的最后一项。这使得以后重新排序或扩展序列变得更容易。 @AndrewF 我必须同意。这是 JSON 唯一让我生气的事情之一,因为它拒绝处理序列中的尾随逗号。 一定是 C/Java 程序员对此投票,因为他们看到了一些熟悉的东西。【参考方案3】:根据PEP8 style guide有两种方式来格式化字典:
mydict =
'key': 'value',
'key': 'value',
...
或
mydict =
'key': 'value',
'key': 'value',
...
如果你想符合 PEP8,我会说其他任何技术上都是错误的。
【讨论】:
【参考方案4】:以任何你想要的方式定义你的字典,然后试试这个:
from pprint import pprint
pprint(yourDict)
# for a short dictionary it returns:
'foo': 'bar', 'foo2': 'bar2', 'foo3': 'bar3'
# for a longer/nested:
'a00': 'b00': 0,
'b01': 1,
'b02': 2,
'b03': 3,
'b04': 4,
'b05': 5,
'b06': 6,
'b07': 7,
'b08': 8,
'b09': 9,
'a01': 1,
'a02': 2,
'a03': 3,
'a04': 4,
'a05': 5,
'a06': 6,
'a07': 7,
'a08': 8,
'a09': 9,
'a10': 10
你喜欢这个输出吗?
【讨论】:
OP 不想知道如何打印,而是想知道如何在源代码中格式化。 @aaronasterling - 当然。这可以告诉他如何在他的源代码中格式化给定的结构。 那么 pprint 是如何打印出来的呢?第二还是第三? @Ashish - 第一个是短结构,第二个是长结构 是的,因为pprint
在标准库中,它提供了一个更可取的样式,根据Zen of Python 的座右铭“应该有一个--最好只有一个--显而易见的方法。”【参考方案5】:
如果您使用ganeti(尊重 PEP 8),您应该选择第三个选项。
something =
'foo1': 'bar1',
'foo2': 'bar2',
'foo3': 'bar3',
...
我特别喜欢这个。因为你可以只选择你想要的元素。而且我觉得这样在两端删除或添加元素会更快。
注意:正如评论中指出的那样,根据 PEP,':' (E203) 之前不应有空格。
【讨论】:
这不符合PEP8,因为':'之前有空格(E203)。【参考方案6】:绝对不是选项 1,Python 的优势之一是它的易读性。选项 1 严重降低了可读性。
在 2 和 3 中,我将重复 pyfunc 为两者陈述的相同原因。
但是,在我自己的代码中,我更喜欢选项 3,因为第一个元素有时会因为位于声明行的末尾而“丢失”,并且在快速浏览代码时有时我不会立即看到它。我知道这有点傻,但大脑以神秘的方式运作......
【讨论】:
【参考方案7】:好吧,第一个是不行的,因为你的行应该只有 79 个字符宽。至于其他两个选项,我想这是一个口味问题,但我个人更喜欢第二个选项。
【讨论】:
【参考方案8】:我更喜欢第二个或第三个。
原因:
-
每个元素都独占一行
到达行尾以添加新元素在文本编辑器中是一种痛苦
添加新元素很容易
使用第三个选项,有时您可以通过选择这些行来检查元素的数量。大多数编辑器会告诉您选定的行数。
【讨论】:
@aaronasterling:是的,我应该写第二个和第三个选项。 我不同意#2。使用能够为您提供动力而不是限制您的文本编辑器。【参考方案9】:我喜欢第二种方式:
something = 'foo' : 'bar',
'foo2' : 'bar2',
'foo3' : 'bar3',
...
'fooN': 'barN'
【讨论】:
【参考方案10】:在阅读这篇文章之前,我会选择您给出的第三个选项。但现在我可能会选择不是 Török Gábor 的风格:
我的字典 = 1:“某事”, 2:'其他东西',
但老实说,除了你的第一个选项之外的任何东西都可能没问题。
【讨论】:
【参考方案11】:我想提一下以下选项,PEP8 中没有特别提到,但在dictionary documentation 中有说明:“当键是简单字符串时,使用关键字参数指定对有时更容易:”
my_dict = dict(
foo = 1,
bar = 2,
baz = 3,
...
)
然而,它并没有解决缩进问题。
【讨论】:
以上是关于用于列表、字典等的 Python“最佳格式化实践”的主要内容,如果未能解决你的问题,请参考以下文章