我找到了一些对我没有意义的东西.我希望有人可以解释一下.
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语句?
获得行为的唯一方法就是缩进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中,当您选择文本时,空格显示为灰色点,选项卡显示为一行:
