Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Atom自动缩进脚本破坏Python缩进_Python_Coffeescript_Indentation_Atom Editor - Fatal编程技术网

Atom自动缩进脚本破坏Python缩进

Atom自动缩进脚本破坏Python缩进,python,coffeescript,indentation,atom-editor,Python,Coffeescript,Indentation,Atom Editor,我在init.coffee文件中为Atom配置编写了此函数,以自动缩进整个文件: atom.commands.add 'body', 'custom:auto-format', -> editor = atom.workspace.getActiveTextEditor(); oldSelection = editor.getSelectedBufferRanges(); editor.selectAll(); editor.autoIndentSele

我在init.coffee文件中为Atom配置编写了此函数,以自动缩进整个文件:

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\uuuuuu name\uuuu='\uuuuuu main\uuuu':
测试视为顶级语句并不重要。Python不知道这一点,这样的测试在Python代码中的任何地方都是合法的,有时甚至在函数或类定义中也是有意义的

您不能自动缩进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\uuuuuu name\uuuu='\uuuuuu main\uuuu':
测试视为顶级语句并不重要。Python不知道这一点,这样的测试在Python代码中的任何地方都是合法的,有时甚至在函数或类定义中也是有意义的

不能自动缩进Python代码。这两种缩进变体都是完全合法的Python代码;只有程序员知道其中一个错误的原因。@MartijnPieters缩进后的python代码显然不是预期的结果。main不应该像阶乘函数的else一样缩进。编辑:我看到了我的逻辑错误。main仍然是if语句假设该行不是“
if\uu name\uu
”,而是“
if foo:
”?一个自动压头怎么知道它应该去哪里?@Nedbatcheld噢-我明白你们的意思了。我的错!是的,我想我还在考虑其他语言的主要方法。从技术上讲,它仍然是一个if语句,我已经回滚了您的编辑;这个问题在更改之前实际上更有意义,我在回答中引用了
\uuu name\uuu
测试。你不能自动缩进Python代码。这两种缩进变体都是完全合法的Python代码;只有程序员知道其中一个错误的原因。@MartijnPieters缩进后的python代码显然不是预期的结果。main不应该像阶乘函数的else一样缩进。编辑:我看到了我的逻辑错误。main仍然是if语句假设该行不是“
if\uu name\uu
”,而是“
if foo:
”?一个自动压头怎么知道它应该去哪里?@Nedbatcheld噢-我明白你们的意思了。我的错!是的,我想我还在考虑其他语言的主要方法。从技术上讲,它仍然是一个if语句,我已经回滚了您的编辑;这个问题在改变之前实际上更有意义,我在回答中引用了
\uuu name\uuuu
测试。好吧,我现在看到了我的错误。非常感谢。虽然自动缩进几乎适用于所有其他语言。好吧,我现在看到了我的错误。非常感谢。尽管如此,自动缩进将适用于几乎所有其他语言。