3

在 Python 中,如果你写了 100 行代码却忘记在某处添加一堆循环语句,你会怎么做?

我的意思是,如果你在某处添加一个 while 语句,你现在必须缩进它下面的所有行。这不像你可以只戴上牙套就可以了。转到每一行并添加制表符/空格。如果您在现有代码中添加嵌套循环/if/then 语句怎么办?

我错过了一些捷径吗?

4

5 回答 5

11

我认为每个严肃的编辑器或 IDE 都支持选择多行并按 Tab 缩进或 Shift-Tab 取消缩进所有行的选项。

于 2010-10-16T09:09:12.143 回答
3

在IDLE,标准python IDE中,选择代码,继续'格式',你可以选择缩进区域,缩进区域等

于 2010-10-16T09:21:05.540 回答
1

您必须使用编辑器命令重新缩进。

请记住:美丽胜于丑陋。

...以及“Python之禅”的其余部分,蒂姆·彼得斯(Tim Peters)

# python -c "import this"
于 2010-10-16T09:15:01.503 回答
1

编辑:重写以适应fileinput“怪癖”*

def indent_code(filename, startline, endline):
    from fileinput import input
    from itertools import izip, count

    all_remaining = count()
    def print_lines(lines, prefix='', range=all_remaining):
        for _, line in izip(range, lines):
            print prefix + line,

    lines = input(filename, inplace=1)
    print_lines(lines, range=xrange(1, startline))  # 1-based line numbers
    print_lines(lines, '    ', xrange(startline, endline + 1)) # inclusive
    print_lines(lines)

def main():
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('filename')
    parser.add_argument('startline', type=int)
    parser.add_argument('endline', type=int)
    ns = parser.parse_args()
    indent_code(ns.filename, ns.startline, ns.endline)

if __name__ == '__main__':
    main()

好吧,要么那个要么>}

*:我最初是使用一个不错的、简洁的组合stdout.writelines和一些生成器表达式来编写的。不幸的是,该代码不起作用。在调用它的方法之前,返回的迭代器fileinput.input()实际上不会打开文件。next它同时发挥其粗略的输出重定向魔法sys.stdout。这意味着如果您调用sys.stdout.writelines并传递fileinput.input迭代器,您的调用和输出将转到原始标准输出,而不是重新映射fileinput到“当前”正在处理的文件的标准输出。因此,您最终会得到应该替换文件内容的行,而这些行只是打印到终端。

next可以通过在调用之前调用 fileinput 迭代器来解决此问题stdout.writelines,但这会导致其他问题:到达输入文件的末尾会导致其句柄在被next调用时从迭代器的方法中关闭file.writelines。在 Python 2.6 下,这会出现段错误,因为在从迭代器获取下一个值之后,没有检查(在实现 的 C 代码中writelines)来查看文件是否仍然打开,并且文件句柄非零。我认为在 2.7 下它只是抛出一个异常,所以这个策略可能在那里有效。

上面的代码实际上确实测试正确。

于 2010-10-16T12:22:11.840 回答
0
  • textmate(也许是 e?):然后选择 apple-]
  • bbedit:也选择然后苹果-]
  • emacs:然后选择 Mx 'indent-region'
  • bpython:不知道,在 bpython 中自动缩进很容易,你必须努力打破它
  • xcode:不要在 xcode 中做 python

这就是我需要知道的。是的,在缩进不佳的块上方或下方打支架很容易,但是您知道一周后当您一天没有盯着它看时,它只会使您感到困惑。伙计们。

于 2010-10-16T11:18:48.440 回答