Atom 自动缩进脚本破坏了 Python 缩进
Atom auto indentation script ruins Python indentation
我在 Atom 配置的 init.coffee 文件中编写了这个函数来自动缩进整个文件:
atom.commands.add 'body', 'custom:auto-format', ->
editor = atom.workspace.getActiveTextEditor();
oldSelection = editor.getSelectedBufferRanges();
editor.selectAll();
editor.autoIndentSelectedRows();
editor.setSelectedBufferRanges(oldSelection);
对于除 Python 之外的所有语言,它都能完美运行!我对结果非常满意。然而,CoffeeScript 的自动缩进完全搞乱了 Phyton 代码。
它需要这个文件:
import sys
def factorial (n):
if n == 1:
return 1
else:
return n * factorial(n-1)
if __name__ == "__main__":
for arg in sys.argv[1:]:
n = factorial(int(arg))
print("The factorial of " + arg + " is " + str(n))
并且无法识别阶乘函数的结束位置,因此缩进如下:
import sys
def factorial (n):
if n == 1:
return 1
else:
return n * factorial(n-1)
if __name__ == "__main__":
for arg in sys.argv[1:]:
n = factorial(int(arg))
print("The factorial of " + arg + " is " + str(n))
如果有人知道如何解决这个问题,我们将不胜感激!
您不能自动缩进 Python 代码,句号。
自动缩进仅适用于块由明确的开始和结束标记(例如花括号)描绘的语言。此类语言中的缩进本质上是可选的,仅供人类软件开发人员用于帮助阅读。
但在Python中缩进是有意义的;代码的执行方式随缩进而变化。要求软件决定应用多少缩进就像要求计算机读懂你的想法,然后猜测程序员希望代码首先做什么。
例如,以下未缩进的代码可以以不同的方式缩进,并导致不同的结果。哪一种解释是正确的?
var = 'foobar'
for i in range(5):
if var.endswith('bar'):
print('Hello')
if i == 0:
print('World')
break
var += 'spam'
else:
print('!')
将 if __name__ == '__main__':
测试视为顶级语句并不重要。 Python 不知道,这样的测试在 Python 代码中的任何地方都是合法的,有时甚至可能在函数或 class 定义中有意义。
我在 Atom 配置的 init.coffee 文件中编写了这个函数来自动缩进整个文件:
atom.commands.add 'body', 'custom:auto-format', ->
editor = atom.workspace.getActiveTextEditor();
oldSelection = editor.getSelectedBufferRanges();
editor.selectAll();
editor.autoIndentSelectedRows();
editor.setSelectedBufferRanges(oldSelection);
对于除 Python 之外的所有语言,它都能完美运行!我对结果非常满意。然而,CoffeeScript 的自动缩进完全搞乱了 Phyton 代码。
它需要这个文件:
import sys
def factorial (n):
if n == 1:
return 1
else:
return n * factorial(n-1)
if __name__ == "__main__":
for arg in sys.argv[1:]:
n = factorial(int(arg))
print("The factorial of " + arg + " is " + str(n))
并且无法识别阶乘函数的结束位置,因此缩进如下:
import sys
def factorial (n):
if n == 1:
return 1
else:
return n * factorial(n-1)
if __name__ == "__main__":
for arg in sys.argv[1:]:
n = factorial(int(arg))
print("The factorial of " + arg + " is " + str(n))
如果有人知道如何解决这个问题,我们将不胜感激!
您不能自动缩进 Python 代码,句号。
自动缩进仅适用于块由明确的开始和结束标记(例如花括号)描绘的语言。此类语言中的缩进本质上是可选的,仅供人类软件开发人员用于帮助阅读。
但在Python中缩进是有意义的;代码的执行方式随缩进而变化。要求软件决定应用多少缩进就像要求计算机读懂你的想法,然后猜测程序员希望代码首先做什么。
例如,以下未缩进的代码可以以不同的方式缩进,并导致不同的结果。哪一种解释是正确的?
var = 'foobar'
for i in range(5):
if var.endswith('bar'):
print('Hello')
if i == 0:
print('World')
break
var += 'spam'
else:
print('!')
将 if __name__ == '__main__':
测试视为顶级语句并不重要。 Python 不知道,这样的测试在 Python 代码中的任何地方都是合法的,有时甚至可能在函数或 class 定义中有意义。