python词典的编码指南

时间:2012-02-12 22:46:32

标签: python coding-style

我有一个python字典,其定义不适合单行。谁能告诉我python词典的指南。我现在有这个对我的眼睛不好看。

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

5 个答案:

答案 0 :(得分:9)

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测试。

答案 1 :(得分:4)

人们对如何最好地格式化这样的事情有所不同。我更喜欢:

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

我喜欢这种风格的东西:

  1. 它允许轻松进行多次嵌套。在开放式支撑下缩进会导致仅仅在两个级别之后产生过多的压痕。
  2. 最后一项之后的逗号表示我可以添加另一行而不更改当前最后一行。
  3. 缩进的右括号遵循其他Python视觉样式,其中没有明显的终止线,只是表示块结束的未命名。
  4. (PS:“曼哈顿”里面只有一个......)

答案 2 :(得分:2)

您可以选择以下选项(以及其他选项):

initialstate = {
    'state': grid,
    'f': find_manhatten_distance(grid,goal),
    'g': 0,
    'h': find_manhatten_distance(grid,goal),
    'ancestor': None,
    }
  • Pro :版本控制友好:可以移除或插入行(包括第一行)而不会影响超过1行(顺便说一句,这仅适用于添加前导,的情况)
  • Pro :项目的大量水平空间
  • Con:也许 显然已分配给initialstate

initialstate = { 'state': grid,
                 'f': find_manhatten_distance(grid,goal),
                 'g': 0,
                 'h': find_manhatten_distance(grid,goal),
                 'ancestor': None, }
  • Pro :非常紧凑,最大限度地利用可用的水平空间
  • Pro :保留变量left,value right的常用语义,从而明确说明所分配的内容
  • Con :如果变量名称很长,则可能用完了空间
  • Con :对版本控制不太友好:添加或删除行甚至更改变量名称都会导致差异

答案 3 :(得分:1)

对于键是字符串的字典初始化,您可以尝试使用关键字参数而不是dict(...) dict文字语法的{...}构造函数,因为它会删除所有额外的引号。发现定义混乱。

initialstate = dict(state    = grid,
                    f        = find_manhattan_distance(grid, goal),
                    g        = 0,
                    h        = find_manhattan_distance(grid, goal),
                    ancestor = None)

正如你所看到的,我也喜欢排列等号,这样我就可以向下扫描并轻松查看作业。

答案 4 :(得分:0)

PEP8说,您应该避免排队=的cos,否则当一个较长的变量名出现并弄乱您的对齐方式时,它会咬您。

如果您喜欢“向下搜索列表”,则标识符和=之间的巨大差距就是左右眼球痛。为什么不对齐变量,以使两个半部在视觉上都在赋值运算符旁边?

initialstate = dict(state = grid,
                        f = find_manhattan_distance(grid, goal),
                        g = 0,
                        h = find_manhattan_distance(grid, goal),
                 ancestor = None
               )

奖金:可以容纳新的超长变量名称,而不必在较早的项目上添加空格:

initialstate = dict(state = grid,
                        f = find_manhattan_distance(grid, goal),
                        g = 0,
                        h = find_manhattan_distance(grid, goal),
                 ancestor = None,
 user_selected_startpoint = 0
               )