Python字典的编码规范

2 投票
5 回答
3826 浏览
提问于 2025-04-17 12:55

我有一个Python字典,但它的定义太长,不能放在一行里。有人能告诉我关于Python字典的写法规范吗?我现在的写法看起来不太好。

initialstate =  {
                    'state':grid,
                    'f':find_manhattan_distance(grid,goal),
                    'g':0,
                    'h':find_manhattan_distance(grid,goal),
                    'ancestor': None
                }

5 个回答

2

你可以选择以下几种选项(还有其他一些选项):

initialstate = {
    'state': grid,
    'f': find_manhatten_distance(grid,goal),
    'g': 0,
    'h': find_manhatten_distance(grid,goal),
    'ancestor': None,
    }
  • 优点: 适合版本控制:可以在不影响其他行的情况下,删除或插入行(包括第一行)。顺便说一下,这只有在你加上前面的 , 时才适用。
  • 优点: 为项目提供了很多横向空间。
  • 缺点: 可能不太明显这个字典是赋值给 initialstate 的。

initialstate = { 'state': grid,
                 'f': find_manhatten_distance(grid,goal),
                 'g': 0,
                 'h': find_manhatten_distance(grid,goal),
                 'ancestor': None, }
  • 优点: 非常紧凑,最大限度地利用了可用的横向空间。
  • 优点: 保持了变量在左,值在右的常规语义,这样就非常清楚地知道赋值在哪里。
  • 缺点: 如果变量名很长,可能会没有空间。
  • 缺点: 不太适合版本控制:添加或删除行,甚至更改变量名都会导致差异。
4

大家对这种格式的最佳写法看法不一。我个人喜欢这样:

initialstate =  {
    'state': grid,
    'f': find_manhattan_distance(grid, goal),
    'g': 0,
    'h': find_manhattan_distance(grid, goal),
    'ancestor': None,
    }

我喜欢这种风格的原因:

  1. 这种格式可以很方便地进行多层嵌套。如果把代码缩进到打开的大括号下面,经过两层后就会缩进得太多了。
  2. 最后一个项目后面有个逗号,这样我可以在不改变当前最后一行的情况下,添加新的一行。
  3. 关闭的大括号缩进跟其他Python的视觉风格一致,没有明显的结束行,只是通过缩进的减少来表示代码块的结束。

(顺便说一句,“Manhattan”这个词里只有字母a……)

10

pep8.py 提到:

mydict.py:2:28: E231 missing whitespace after ':'
mydict.py:1:15: E222 multiple spaces after operator

试试这个:

initialstate = {
    'state': grid,
    'f': find_manhatten_distance(grid, goal),
    'g': 0,
    'h': find_manhatten_distance(grid, goal),
    'ancestor': None
}

注意逗号和运算符后面的空格变化。这个版本通过了所有 pep8.py 的测试。

撰写回答