标签:测试 blank number == class 定义 nbsp from 文件的
模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。(有点像java的class文件,一个class文件包含多个方法)
一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。
当我们使用import语句的时候,Python解释器是怎样找到对应的文件的呢?
这就涉及到Python的搜索路径,搜索路径是由一系列目录名组成的,Python解释器就依次从这些目录中去寻找所引入的模块。
例如:模块结构如下:
代码如下:
StringUtils.py
title = "字符串工具栏" def isBlank(str): if str is None or ‘‘ == str: return True; else: return False; def isNotBlank(str): return isBlank(str) == False;
NumberUtils.py
title = "数字工具栏" def add(*args): result = 0; for ele in args: result += ele; return result;
下面的测试代码都是基于ModuleTest.py源代码进行
想使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下:
import module1[, module2[,... moduleN]
例如:
import cn.qlq.a.StringUtils as myStringUtils, cn.qlq.a.NumberUtils if __name__ == ‘__main__‘: print(myStringUtils.isNotBlank(‘‘)); print(myStringUtils.title); print(cn.qlq.a.NumberUtils.add(1, 2));
结果:
False
字符串工具栏
3
注意:
引入带包的模块的时候(比如上面的两个工具类),第一种方式用as起一个别名之后用别名访问(参考StringUtils);第二种是用包模块名全路径访问(参考NumberUtils)
不建议一行引入多个模块
Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中,语法如下:
from modname import name1[, name2[, ... nameN]]
例如:
import cn.qlq.a.NumberUtils from cn.qlq.a.StringUtils import title from cn.qlq.a.StringUtils import isBlank as isBlankFun if __name__ == ‘__main__‘: print(title); print(isBlankFun(‘2‘)); print(cn.qlq.a.NumberUtils.add(1, 2));
结果:
字符串工具栏
False
3
把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:
from modname import *
这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。
例如:
import cn.qlq.a.NumberUtils from cn.qlq.a.StringUtils import * if __name__ == ‘__main__‘: print(title); print(isBlank(‘2‘)); print(cn.qlq.a.NumberUtils.add(1, 2));
结果:
字符串工具栏
False
3
这种方式有一个缺点就是最后引入的模块的方法或属性会覆盖之前引入的,例如:(后引入的NumberUtils的title属性会覆盖前面的)
from cn.qlq.a.StringUtils import * from cn.qlq.a.NumberUtils import * if __name__ == ‘__main__‘: print(title); print(isBlank(‘2‘)); print(add(1, 2));
结果
数字工具栏
False
3
模块除了方法定义,还可以包括可执行的代码。这些代码一般用来初始化这个模块。这些代码只有在第一次被导入时才会被执行。
例如:
StringUtils.py修改为:
title = "字符串工具栏" def isBlank(str): if str is None or ‘‘ == str: return True; else: return False; def isNotBlank(str): return isBlank(str) == False; print("StringUtils 模块被引入")
NumberUtils.py修改为:
title = "数字工具栏" def add(*args): result = 0; for ele in args: result += ele; return result; print("NumberUtils 模块被引入")
ModuleTest.py测试:
from cn.qlq.a.StringUtils import * from cn.qlq.a.NumberUtils import * if __name__ == ‘__main__‘: print(title); print(isBlank(‘2‘)); print(add(1, 2));
结果:
StringUtils 模块被引入
NumberUtils 模块被引入
数字工具栏
False
3
一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。
例如:
title = "数字工具栏" def add(*args): result = 0; for ele in args: result += ele; return result; if __name__ == ‘__main__‘: print("自身主函数运行"); else: print("NumberUtils 模块被引入")
运行自身:
自身主函数运行
通过ModuleTest.py引入模块:
from cn.qlq.a.StringUtils import * from cn.qlq.a.NumberUtils import * if __name__ == ‘__main__‘: print(title); print(isBlank(‘2‘)); print(add(1, 2));
结果:
StringUtils 模块被引入
NumberUtils 模块被引入
数字工具栏
False
3
内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回。如果没有给定参数,那么 dir() 函数会罗列出当前定义的所有名称。
ModuleTest.py代码如下:
import cn.qlq.a.StringUtils if __name__ == ‘__main__‘: print(dir(cn.qlq.a.StringUtils)) print(dir())
结果:
StringUtils 模块被引入
[‘__builtins__‘, ‘__cached__‘, ‘__doc__‘, ‘__file__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘, ‘__spec__‘, ‘isBlank‘, ‘isNotBlank‘, ‘title‘]
[‘__annotations__‘, ‘__builtins__‘, ‘__cached__‘, ‘__doc__‘, ‘__file__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘, ‘__spec__‘, ‘cn‘]
标签:测试 blank number == class 定义 nbsp from 文件的
原文地址:https://www.cnblogs.com/qlqwjy/p/11588307.html