113.模块原则

Posted kangwenju

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了113.模块原则相关的知识,希望对你有一定的参考价值。

模块原则

一个独立的Python文件就是一模块,在导入模块时,模块中所有没有任何缩进的代码 都会被执行一遍。

开发需求:
在实际开发中,每一个模块都是独立开发的,大多都有专人负责,开发人员通常会在各自负责的模块中增加一些测试代码,仅在模块内测试使用,而被导入到其他模块中不需要执行.

解决方案:
__name__ 属性可以做到,测试模块的代码只在测试情况下被运行,而在被导入时不会被执行。
__name__ 是Python的一个内置属性,记录着一个字符串,如果是被其他模块导入的,__name__ 属性值就是模块名,如果是当前执行的程序 __name__ 属性值是 __main__。

所以对于模块制作中的代码,我们应该进行优化。

# 定义一个全局变量
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()

可以根据__name__变量的结果能够判断出,是直接执行的python脚本还是被引入执行的,从而能够有选择性的执行测试代码。

例子:

# import hm_itcast
from hm_itcast import name

模块代码:

# 定义一个全局变量
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()

 

以上是关于113.模块原则的主要内容,如果未能解决你的问题,请参考以下文章

6大设计原则之开闭原则

代码片段:Shell脚本实现重复执行和多进程

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

Python学习第113天(pymysql模块)

如何有条件地将 C 代码片段编译到我的 Perl 模块?

设计模式六大原则:开闭原则