zoukankan      html  css  js  c++  java
  • 114.模块中的__all__

    模块中的__all__

    例如模块制作中自定义的hm_itcast.py
    # 定义一个全局变量
    name = "自定义模块"
    
    # 定义一个函数求和
    def add2num(a, b):
        return a + b
    
    # 自定义一个人类
    class Person(object):
        pass
    
    # 定义一个函数, 用于测试
    def test():
        # 测试全局变量
        print(name)
        # 测试函数
        ret = add2num(10, 20)
        print(ret)
        # 测试类
        p = Person()
        print(p)
    
    # 解决方案
    if __name__ == '__main__':
        # 调用函数
        test()

    没有__all__

    如果hm_itcast.py中没有__all__,如果其他模块在导入hm_itcast.py时候,使用的from hm_itcast import *。

    # 导入模块
    from hm_itcast import *
    
    # 全局变量
    print(name)
    # 函数
    ret = add2num(10, 20)
    print(ret)
    #
    p = Person()
    print(p)

    有__all__

    如果hm_itcast.py中有__all__,如果其他模块在导入hm_itcast.py时候,使用的from hm_itcast import *。

    # __all__变量保存全局变量,函数,类的字符串名字
    __all__ = ["name", "add2num"]
    
    # 定义一个全局变量
    name = "自定义模块"
    
    # 定义一个函数求和
    def add2num(a, b):
        return a + b
    
    # 自定义一个人类
    class Person(object):
        pass
    
    # 定义一个函数, 用于测试
    def test():
        # 测试全局变量
        print(name)
        # 测试函数
        ret = add2num(10, 20)
        print(ret)
        # 测试类
        p = Person()
        print(p)
    
    # 解决方案
    if __name__ == '__main__':
        # 调用函数
        test()

    如果一个模块中有__all__变量,那么也就意味着这个变量中的元素,不会被from 模块名 import *时导入。

    例子:

    # 模块中的__all__ 配合模块导入 from 模块名 import *使用的
    
    from hm_itcast import *
    
    print(name)
    print(add2num(10, 10))
    # print(Person())
    
    import hm_itcast
    print(hm_itcast.Person())

    模块代码:

    # 主要对模块使用者 使用from 模块名 import *进行约束
    __all__ = ["name", "add2num"]
    
    # 定义一个全局变量
    name = "自定义模块"
    
    # 函数
    def add2num(a, b):
        return a + b
    
    # 自定义人类
    class Person(object):
        pass
    
    # 程序员需要对自己定义的模块需要进行自测
    def tt():
        print(name)
        print(add2num(10, 20))
        print(Person())
    
    
    # 执行tt() 是程序员在自测需要执行的代码
    # 如果被其他模块导入 那么不应该执行tt()
    
    # __name__的数值变化
    # 如果直接运行此模块
    # __name__ = __main__
    # 如果被导入使用的时候
    # __name__ = hm_itcast
    # 判断程序的入口
    if __name__ == '__main__':
        tt()
  • 相关阅读:
    [后缀数组] Luogu P5028 Annihilate
    [后缀数组] Luogu P3809 后缀排序
    [差分][线段树] Luogu P4243 等差数列
    [线段树] Luogu P4314 COU监控
    [二分][dp凸优化] Luogu P4383 林克卡特树lct
    [树上差分][dfs] Luogu P4652 One-Way Streets
    [dfs][思维] Luogu P3208 矩阵
    [dfs][二进制状压] Luogu P4906 小奔关闹钟
    [容斥] Luogu P5339 唱、跳、rap和篮球
    [dfs][模拟网络流] Luogu P4189 星际旅行
  • 原文地址:https://www.cnblogs.com/kangwenju/p/12883056.html
Copyright © 2011-2022 走看看