原文链接:http://www.juzicode.com/archives/659
先看一段代码,这个代码里定义了一个func()函数,但是函数体内部没有任何语句,结果解释器在解析到”def func():”后面时,提示IndentationError异常:
def func(): if __name__ == '__main__': func() ==========结果: File "E:\juzicode\test.py", line 5 if __name__ == '__main__': ^ IndentationError: expected an indented block在条件、循环语句的下级缩进中,有时具体业务并不是需要马上实现;或者定义函数时,先只是取了一个函数名称,函数内部还没有想好怎么实现,这个时候就可以使用pass语句先占着位置,避免程序执行的时候抛异常。
if a==10: pass def func(): pass常见的用法是在下一层缩进中使用pass语句进行"占位",除了用pass语句还可以使用”...”来代替:
def func(): ...你可能会有疑问,”...”是个什么东东?先上type()函数检查类型试试:
>>>type(...) <class 'ellipsis'>原来 ”...” 是一种叫做ellipsis的class,在Python中一切皆对象,既然可以用一种ellipsis类的实例来占位,是不是也可以用一个其他类的实例呢?
def func(): () def func(): [] def func(): 3.14 def func(): 'todo' def func(): 0 def func(): None用上面这些函数代替最前面例子中的func()函数,运行都没有问题,所以用int,str,list等数据类型做占位语句也都是可行的。
下面的例子则是用自定义class的一个实例作为占位语句也没有问题。
class ABC(): def __init__(self): self.a=10 def func(): ABC() if __name__ == '__main__': func()结论: 1.通常使用“pass”作为占位语句; 2.也可以使用“...”作为占位语句; 3.任何内置或自定义类的实例也可以作为占位语句。
下面这段代码摘自Python内置operator模块的源码(安装路径根目录下的"lib\operator.py"文件),这些函数每个return语句前面都有一段“悬挂”的字符串,你还会觉得惊讶吗?
# Comparison Operations *******************************************************# def lt(a, b): "Same as a < b." return a < b def le(a, b): "Same as a <= b." return a <= b def eq(a, b): "Same as a == b." return a == b def ne(a, b): "Same as a != b." return a != b def ge(a, b): "Same as a >= b." return a >= b def gt(a, b): "Same as a > b." return a > b
我们在写注释的时候,可以用一对 ''' '''(三个引号)将注释内容包含起来,比如在函数定义的下一行写三引号注释必须要缩进,就像下面这个例子,聪明的你知道下面这2段代码为什么前者正确,后者会报IndentationError错误了吗?
>>> def func(): ... '''todo''' ... >>> >>> def func(): ... '''todo''' File "<stdin>", line 2 '''todo''' ^ IndentationError: expected an indented block
如果你想及时接收到更冷的Python知识,记得微信扫一扫关注“桔子code”。