在Python中,当你编写100行代码并忘记在某处添加一堆循环语句时,你会怎么做?
我的意思是,如果你在某处添加一个while语句,你现在要缩进它下面的所有行。这并不是说你可以把牙箍放在一起并完成它。转到每一行并添加制表符/空格。如果要将嵌套循环/ if / then语句添加到现有代码中该怎么办?
我错过了一些捷径吗?
答案 0 :(得分:11)
我认为每个认真的编辑器或IDE都支持选择多行的选项,并按Tab键缩进或Shift-Tab取消所有行。
答案 1 :(得分:3)
答案 2 :(得分:1)
您必须使用编辑器命令重新缩进。
请记住:美丽胜过丑陋。
......以及“蒂姆·彼得斯的禅宗之谜”
# python -c "import this"
答案 3 :(得分: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之下只会引发异常,所以这个策略可能会在那里发挥作用。
上面的代码确实可以正确测试。
答案 4 :(得分:0)
这通常都是我需要知道的。也许是的,在一个凹凸不平的块上方或下方拍一个支撑很容易,但是你知道它只会在一周之后将你的狗屎混淆,因为你没有一天盯着它。太大家了。