向现有代码添加循环语句时的Python缩进
在Python中,当您编写100行代码而忘记在某处添加一堆循环语句时,您会怎么做 我的意思是,如果你在某处添加一个while语句,你现在必须缩进它下面的所有行。这并不是说你可以戴上牙套就可以完成。转到每一行并添加制表符/空格。如果将嵌套循环/if/then语句添加到现有代码中会怎么样向现有代码添加循环语句时的Python缩进,python,indentation,python-idle,Python,Indentation,Python Idle,在Python中,当您编写100行代码而忘记在某处添加一堆循环语句时,您会怎么做 我的意思是,如果你在某处添加一个while语句,你现在必须缩进它下面的所有行。这并不是说你可以戴上牙套就可以完成。转到每一行并添加制表符/空格。如果将嵌套循环/if/then语句添加到现有代码中会怎么样 我是否缺少一些快捷方式?我认为每个严肃的编辑器或IDE都支持选择多行并按tab键缩进或按Shift-tab键取消缩进所有行的选项。您必须使用编辑器命令重新缩进 记住:美丽总比丑陋好 。。。还有“Python禅宗,由
我是否缺少一些快捷方式?我认为每个严肃的编辑器或IDE都支持选择多行并按tab键缩进或按Shift-tab键取消缩进所有行的选项。您必须使用编辑器命令重新缩进 记住:美丽总比丑陋好 。。。还有“Python禅宗,由蒂姆·彼得斯创作”
在IDLE标准python IDE中,选择代码,继续“格式化”,您可以选择缩进区域、删除区域等
通常我只需要知道这些。是的,在一块凹凸不平的砖上或下面打一个支架是很容易的,但你知道一周后当你一天都没盯着它看的时候,它会把你搞糊涂。Sry u guys.编辑:重写以适应
文件输入
的“偏心”*
好吧,要么这样要么}
*:我最初写这篇文章时使用了stdout.writelines
和一些生成器表达式的简洁组合。不幸的是,该代码不起作用。fileinput.input()
返回的迭代器在调用其next
方法之前不会实际打开文件。它同时在sys.stdout
上运行其粗略的输出重定向魔术。这意味着,如果调用sys.stdout.writelines
并将fileinput.input
迭代器传递给它,则调用和输出将转到原始标准输出,而不是通过fileinput
重新映射到正在处理的文件“当前”。因此,最终的结果是应该替换文件内容的行被打印到终端
在调用stdout.writelines
之前,可以通过调用fileinput迭代器上的next
来解决此问题,但这会导致其他问题:到达输入文件的末尾会导致在file.writelines
中调用迭代器的next
方法时关闭其句柄。在Python2.6下,之所以会出现这种情况,是因为在从迭代器获取下一个值后,没有检查(在实现writelines
的C代码中)文件是否仍然打开,并且文件句柄是否为非零。我认为在2.7下,它只是抛出了一个例外,所以这个策略可能会在那里起作用
上述代码实际上测试正确。True。我想你不能使用普通的旧记事本。不管你是否使用Python,如果你添加了大约100行代码的控制结构,但没有缩进,你应该没收你的键盘。如果你需要添加大约100行代码的循环,特别是Python代码,你所关心的比担心如何缩进它们更重要。我建议您花一些时间重新设计代码,并将其重构为可管理的块、对象和组件。+1到@detly。尽管从技术上讲,你不需要在其他语言中正确缩进,但任何试图阅读它的人都会对你恨之入骨(这可能包括一个月后你自己,当你觉得它不新鲜的时候)。或者只需按TAB键(或Ctrl-])缩进选择。尽管这种方式一开始可能并不明显,除非你是荷兰人。。。等等,我们又在玩什么?注意:上面的代码实际上不起作用<使用
fileinput
进行code>inplace处理不符合最少意外的原则。
# python -c "import this"
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()