Python中的__all__

作者: SnailTyan | 来源:发表于2018-02-08 18:19 被阅读770次

    文章作者:Tyan
    博客:noahsnail.com  |  CSDN  |  简书

    1. 动机

    今天看MXNet的gluon源码时发现mxnet.gluon.data.vision__all__如下:

    __all__ = ['MNIST', 'FashionMNIST', 'CIFAR10', 'CIFAR100',
               'ImageRecordDataset', 'ImageFolderDataset']
    

    2. 作用

    __all__是一个字符串list,用来定义模块中对于from XXX import *时要对外导出的符号,即要暴露的借口,但它只对import *起作用,对from XXX import XXX不起作用。

    3. 测试

    all.py文件时要导出的模块,内容如下:

    __all__ = ['x', 'y', 'test']
    
    x = 2
    y = 3
    z = 4
    
    def test():
        print('test')
    
    • 测试文件一
    from foo import *
    print('x: ', x)
    
    print('y: ', y)
    print('z: ', z)
    
    test()
    
    • 运行结果:
    x:  2
    y:  3
    Traceback (most recent call last):
      File "test.py", line 6, in <module>
        print('z: ', z)
    NameError: name 'z' is not defined
    
    • 测试文件二
    from foo import *
    from foo import z
    print('x: ', x)
    
    print('y: ', y)
    print('z: ', z)
    
    test()
    
    • 运行结果
    x:  2
    y:  3
    z:  4
    test
    

    参考资料

    1. https://stackoverflow.com/questions/44834/can-someone-explain-all-in-python

    相关文章

      网友评论

        本文标题:Python中的__all__

        本文链接:https://www.haomeiwen.com/subject/uuattftx.html