功能中的缩进不能按预期工作

Lum*_*mo5 2 python python-2.7

我找到了一些对我没有意义的东西.我希望有人可以解释一下.

def test(word):
    total = 0
    for l in word:
        print l

test('python')
Run Code Online (Sandbox Code Playgroud)

结果是'python'(每个字母出现在它自己的行上).

def test(word):
    total = 0
    for l in word:
        print l
    return total

test('python')
Run Code Online (Sandbox Code Playgroud)

结果只是'p'.

为什么添加return声明有这种效果?两个代码块不应该做同样的事情吗?这是否意味着它只通过for循环一次然后执行return语句?

Mar*_*ers 9

获得行为的唯一方法就是缩进return total成为for循环的一部分.如果它在你的编辑器中看起来不像那样,那是因为你已经为你的return行使用了TAB字符:

>>> code_as_posted = '''\
... def test(word):
...     total = 0
...     for l in word:
...         print l
...     return total
... '''
>>> code_as_posted.splitlines()[-1]
'\treturn total'
Run Code Online (Sandbox Code Playgroud)

看到那个\t角色逃脱吗?这是一个制表符,当被Python解释时会扩展到最多8个空格 ; 请参阅Python参考文档中的缩进:

首先,标签被替换(从左到右)一到八个空格,使得直到并包括替换的字符总数是八的倍数(这与Unix使用的规则相同).然后,第一个非空白字符前面的空格总数确定行的缩进.

由于return早期退出循环,您只能看到'p'打印的字符.

您的编辑器和Stack Overflow Markdown实现都会将选项卡显示为四个空格,因此很难在此处发现此特定错误.使用-tt命令行开关运行Python以在混合选项卡和空格使用上引发异常.

您需要配置编辑器以将选项卡展开到空格,或者仅使用选项卡.不要混合两种风格.在Python的风格指南 强烈建议您只使用空间:

空格是首选的缩进方法.

选项卡应仅用于与已使用选项卡缩进的代码保持一致.

许多编辑人员也可以明确显示标签.在Sublime Text中,当您选择文本时,空格显示为灰色点,选项卡显示为一行:

Sublime Text编辑器,选择OP代码;  返回线上的选项卡显示为一条线,空格显示为微妙的灰色点


Dmi*_*ylo 7

我100%确定return total在第二个函数中处于同一级别(精确缩进)print.可能你使用混合空格字符(制表符或空格).