python模块、异常
1. python 模块
模块是一个包含所有你定义的函数和变量的文件,其后缀名是.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源代码进行
1. import语句
想使用 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)
不建议一行引入多个模块
2. from ... import ...语句
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
3. from … import * 语句
把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:
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
4. 深入模块
模块除了方法定义,还可以包括可执行的代码。这些代码一般用来初始化这个模块。这些代码只有在第一次被导入时才会被执行。
例如:
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
5. __name__属性
一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__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
6. dir() 函数
内置的函数 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']
2. Python异常处理
原文地址:https://www.cnblogs.com/qlqwjy/p/11588307.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- IntelliJ IDEA添加Class自动生成@author@date模板代码
- 如何优雅的封装requests
- nginx(一) 基础知识
- kubernetes(十三) k8s 集群监控
- TestNG跑个Demo并打个Jar包
- 01-Ansible基础学习
- 02-Ansible入门进阶
- 接口自动化框架pyface详细介绍
- JVM字节码与Java代码层调优
- kubernetes(十四) 基于kubernetes的jenkins持续集成
- 2020测试工具索引
- 测试同学动手搭个简易web开发项目
- kubernetes(十五) kubernetes 运维
- JVM层GC调优(下)
- pytest封神之路第一步 tep介绍