好冷的Python--pass和它的备胎们

原文链接: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”。

                   

posted @ 2020-06-30 19:42  桔子code  阅读(35)  评论(0编辑  收藏  举报