Python学习——模块、包、异常、文件操作、eval函数
模块
定义和好处
- 定义:模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。
- 优点:使用模块可以提高代码的可维护性和重复使用,还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,所以编写自己的模块时,不必考虑名字会与其他模块冲突,但要注意尽量不要与内置函数名字冲突。
模块引入语法
import语句是可以在程序中的任意位置使用的,且针对同一个模块很import多次,为了防止你重复导入,python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载大内存中的模块对象增加了一次引用,不会重新执行模块内的语句注:Python解释器在导入模块时,首先会搜索当前目录指定模块名的文件,如果有就直接导入。如果没有,再搜索系统目录1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20想使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下:
1. import
语法:
import module1[, module2[,... moduleN]
推荐
import module1
import module2
...
这样便于排错
如果 模块名太长 可以使用 as 关键字重命名
如: import module1 as m
2. from...import 导入
Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中,语法如下:
from modname import name1[, name2[, ... nameN]]
例如,要导入模块 fibo 的 fib 函数,使用如下语句:
from fibo import fib, fib2
这样导入之后,不需要通过模块名.访问,可以直接使用模块提供的工具------函数、类、全局变量等
如果两个模块存在同名的函数,后倒入模块的函数会覆盖掉先导入的函数
from...import * 同 import module 作用一样,都是导入所有工具
所以在开发时应尽量避免和系统模块同名的情况__name__属性
一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。说明: 每个模块都有一个__name__属性,当其值是’main’时,表明该模块自身在运行,否则是被引入。1
2
3
4if __name__ == '__main__':
print('程序自身在运行') # 如果在当前模块 执行
else:
print('我来自另一模块') # 如果在其它模块调用 执行包
包是一种管理 Python 模块命名空间的形式,采用”点模块名称”。
在导入一个包的时候,Python 会根据 sys.path 中的目录来寻找这个包中包含的子目录。
目录只有包含一个叫做 init.py 的文件才会被认作是一个包,主要是为了避免一些滥俗的名字(比如叫做 string)不小心的影响搜索路径中的有效模块。
最简单的情况,放一个空的 :file:init.py就可以了。当然这个文件中也可以包含一些初始化代码或者为 __all__变量赋值。
1 |
|
1 |
|
异常
异常关键字
- try/except 捕获异常并处理
- pass 忽略异常
- as 定义异常实例(except MyError as e)
- else 如果try中的语句没有引发异常,则执行else中的语句
- finally 无论是否出现异常,都执行的代码
- raise 抛出/引发异常
语法
1
2
3
4
5
6
7
8
9
10
11
12try:
raise MyError('error message') # 手动抛出异常
except exception1:
pass
except (exception2,exception2,...) as e:
pass
except Exception as e:
pass
else:
pass
finally:
pass自定义异常
需要继承Exception 类1
2
3
4
5
6# 如:
class MyError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)文件读写操作
件操作步骤
- 打开文件
- 读写文件(将文件内容读入内存和将内存内容写入文件)
- 关闭文件
操作文件的函数方法
- open,打开文件,并返回文件对象
- read,将文件内容读到内存
- write,将内容写入文件
- close,关闭文件
1
2
3
4
5
6# eg:
import io
file = open("test")
text = file.read()
print(text)
file.close()文件指针
- 文件指针标记从那个位置开始读取数据
- 第一次挡开文件是,通常文件指针会只想文件的初始位置
- 当执行了read方法后,文件指针会移动到读取内容的末尾
- 如果执行了一次read方法读取了所有内容,再次执行read时由于指针在末尾位置,则将读取不到内容
打开文件的方式
open 函数默认打开文件的方式为只读方式
语法: file = open(“文件名”,“访问方式”)
访问方式 说明 如下:
- r : 以 只读 的方式打开文件,默认模式。如果文件不存在则会抛出异常
- w : 以 只写 的方式打开文件,如果文件存在,会被覆盖,如果不存在创建新文件
- a : 以 追加 的方式打开文件,如果文件已存在,文件指针将会放在文件末尾。如果不存在则创建新文件写入
- r+ : 以 读写 的方式打开文件,文件指针会放在文件的开始位置,如果文件不存在则抛出异常
- w+ : 以 读写 的方式打开文件, 如果文件存在会被覆盖,如果不存在则创建新文件
- a+ : 以 读写 的方式打开文件,如果文件存在,文件指针将会放在文件的结尾,如果文件不存在,创建文件进行写入
按行读写文件内容
read会将文件内容一次性读入到内存,如果文件太大可以 通过readline 方法读,这样一次只读取一行内容1
2
3
4
5
6
7
8
9# eg:
import io
file = open("test")
while True:
text = file.readline()
print(text,end="")
if not text:
break
file.close()文件目录操作
在python中如果要实现对文件目录的操作等,需要导入os模块
文件或者目录操作都支持相对路径和绝对路径
文件操作
方法名 | 说明 | 示例 |
---|---|---|
rename | 重命名文件 | os.rename(源文件名,目标文件名) |
remove | 删除文件 | os.remove(文件名) |
目录操作
方法名 | 说明 | 示例 |
---|---|---|
listdir | 目录列表 | os.listdir(目录名) |
mkdir | 创建目录 | os.mkdir(目录名) |
rmdir | 删除目录 | os.rmdir(目录名) |
getcwd | 获取当前目录 | os.getcwd() |
chdir | 修改工作目录 | os.chdir(目标目录) |
path.isdir | 判断是否是文件 | os.path.isdir(文件路径) |
eval 函数
将字符串当作有效的表达式来求值并返回计算结果
1 |
|
eval 函数使用注意事项
参考:https://blog.csdn.net/zoulonglong/article/details/80446373
Python学习——模块、包、异常、文件操作、eval函数
http://yoursite.com/post/2b9f88cb.html/