python语言基础-模块的定义和使用

定义一个自己的模块

在python中,每个python文件都可作为一个模块,而文件名就是模块名。比如我们创建一个test.py文件,那么这个test.py文件就是一个模块,模块名称就是test

test.py

#test.py

def test():
    print("我是test模块中的test函数")

使用自己的模块

定义好了自己的模块,接下来我们就可以在其它模块中使用我们的模块了,通过import test导入整个模块,或通过from test import test的方式直接导入模块中的test函数。比如我们在建一个main.py文件,然后在该文件中导入test模块并调用test函数

main.py

#main.py

import test

test.test()

当运行main.py时就会输出:我是test模块中的test函数

测试模块及__name__的使用

在实际开发过程中,一个模块开发完成后,开发人员往往会加一些测试代码以保证代码功能的正确和稳定。比如上面创建的test模块,编写完成后想侧一下test的功能是否正常,这时就会直接在模块中调用一下test函数

#test.py

def test():
    print("我是test模块中的test函数")


#测试test函数功能是否正常

test()

#运行后输出结果
"我是test模块中的test函数"

这时候当我们直接运行test.py文件时会打印输出“我是test模块中的test函数”,这样看上去好像一切正常没什么问题。但是如果我们在main.py模块中去导入test模块然后调用用test函数,看看接下来会发生什么

#main.py

import test

test.test()

#直接运行main模块
#运行结果:
"我是test模块中的test函数"
"我是test模块中的test函数"

我们看到运行结果打印输出了两行"我是test模块中的test函数",这是为什么呢,原因是当我们导入一个模块时,这个模块中的代码就会被执行一次。比如test模块本身会调用一次test函数,所以在main中导入test时,test模块中调用test函数的代码就会被执行,而我们在main模块中又调用了一次test函数,所以最终输出两个"我是test模块中的test函数"。 那么如何避免这种情况,即在导入模块时不去执行模块中的测试代码呢?让我们在看一个例子,首先在test.py中加一段打印__name__的代码

#test.py

def test():
    print("我是test模块中的test函数")


print('__name__的值是:%s'% __name__)

#直接运行test.py
#结果输出
"__name__的值是:__main__"

然后再在main.py文件中导入一下test模块

#main.py

import test


#只是导入test模块其它什么都不执行
#直接运行此文件
#运行结果
"__name__的值是:test"

通过上面的示例我们可以看到,两次运行的结果__name__的值是不一样的,在test模块中__name__的值是__main__,而在main模块中导入test模块时__name__的值却是test。这时我们就可以通过判断__name__的值来解决上面提出的问题了,即在其它文件中导入模块时不去执行模块中的测试代码。下面再来修改一下上面的代码:

#test.py

def test():
    print("我是test模块中的test函数")


#测试test函数功能是否正常
if __name__ == "__main__":
    test()

#运行后输出结果
"我是test模块中的test函数"

这个时候当我们再在main模块中导入test模块时,test模块中的测试代码就不会被执行了。

扫描二维码关注公众号,回复: 11607886 查看本文章

总结:

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

猜你喜欢

转载自blog.csdn.net/lixiaosenlin/article/details/91060344