Python 7天快速入门完整视频教程:https://www.bilibili.com/video/BV1o84y1Z7J1
Python 自定义模块
Python中已经有很多的内置模块,以及也有很多的第三方优秀模块,我们直接导入使用即可。
当然我们有时候也需要自己定义一些自定义模块,来实现我们项目的功能。
看下案例:
先定义string_util.py,判断字符串是否空的工具方法
def isEmpty(s: str):
"""
判断字符串是否是空
:param s: 传入字符串参数
:return: 空则返回True,否则返回False
"""
if not s:
return True
elif len(s.strip()) == 0:
return True
else:
return False
再新建一个test.py
# import string_util
#
# print(string_util.isEmpty(""))
# print(string_util.isEmpty(None))
# print(string_util.isEmpty(" "))
# print(string_util.isEmpty(" 12 "))
from string_util import isEmpty
print(isEmpty(""))
print(isEmpty(None))
print(isEmpty(" "))
print(isEmpty(" 12 "))
如果我们在string_util.py里加一个测试代码
我们再运行test.py
经过测试,当我们 from string_util import isEmpty 导入模块的时候,可执行代码也是会一起导入进来的,并且执行。
但是我们不喜欢测试代码被执行。
此时可借助于所有模块内置的name变量进行区分,如果直接使用python命令来运行一个模块,name变量的值为main;如果该模块被导入其他程序中,name变量的值就是模块名。因此,如果希望测试函数只有在使用 python命令直接运行时才执行,则可在调用测试函数时增加判断:只有当name属性为main时才调用测试函数。
代码如下:
if __name__ == '__main__':
print("测试结果:", isEmpty(None))
当我们一个模块里有很多方法的时候,有时候我们只想暴露部分方法,有些方法我们仅限模块内部使用,或者暂时不想对外暴露,这时候,我们可以使用 _ _all__来实现。
string_util.py内部再写一个方法,
def isNotEmpty(s: str):
"""
判断字符串是否不是空
:param s: 传入字符串参数
:return: 不空则返回True,否则返回False
"""
if s:
if len(s.strip()) > 0:
return True
else:
return False
else:
return False
我们现在 想 isNotEmpty暂时不像被外部导入使用。
我们可以用_ all _来指定所有可以被导入使用的成员。
__all__ = ['isEmpty']