仅为个人查阅使用,如有错误还请指正。
在Python中,一个.py文件就称之为一个模块(Module)。
使用模块的好处是大大提高了代码的可维护性,一个模块可以被其他地方引用。
通常编写程序的时候,经常引用其他模块,包括Python内置的模块和来自第三方的模块
使用模块可以避免函数名和变量名冲突,在自定义模块的时候,不要与内置函数名字冲突。
一个项目可能由多人完成,就会存在模块名相同,Python又引入了按目录来组织模块的方法(包)
推荐使用包:每个包必须要有__init__.py文件,可以是空文件,也可以有Python代码。
# 包结构如下
School
|__ __init__.py
|__ law.py
|__ computer.py
|__ foreign.py
- 自定义模块
其实就是在一个py文件里面写函数,或者类。
"""This is a module for absolute value""" # 任何模块代码的第一个字符串被视为模块的文档注释
__author__ = "lowkeyao" # 署名
# 可以把上面的删除掉,看具体项目安排。
def my_abs(x): # 这是对x的值就不做异常处理,只是简单的了解。
if x >= 0:
return x
else:
return -x
- 导入模块
以math这个内置模块为例
- 第一种:可以访问math模块中所有公开的函数,变量,类。
import math
print(math.pow(2, 0.5))
print(math.pi)
print(math.sqrt(100))
- 第二种:只能使用导入的
pow()
函数,pi
变量。除此之外都不能用
from math import pow, pi
print(pow(2, 0.5))
print(pi)
针对第二种的导入方式:可能存在同名的方法,造成冲突。可以使用别名(as)去解决这个问题。
from math import log
from logging import log as logger
print(log(10))
logger(10, "from logging module")
也可以使用import去避免这个冲突
import math, logging
print(math.log(10))
logging.log(10, "something")
注意:以上用logging模块里面的log只是用来举例子,实际开发不是这样使用的。
- 动态模块
两个不同的模块提供的函数功能是一模一样的。
随着版本更新,模块名可能改变,但是功能没变。而当前这个程序需要满足新旧环境都能执行。
举个例子,看看就好。
try:
from io import StringIO
except ImportError:
from StringIO import StringIO
- __future__模块
看名字就知道是未来的意思,对于Python2,Python3就是未来。也就意味着只给旧版本使用。
我们知道,Python2和Python3其中一个区别就是**print
**的输出格式。
- 例1:在Python2环境调用,使用Python3
print
的语法格式。
from __future__ import print_function
print("use python3 print function")
- 例2:在Python2环境调用,使用Python3
division
的语法格式。
Python2默认整除后向下取整,Python3是直接得到小数位。
from __future__ import division
print 5/2
- 常用内建模块(标准库)
这里有些人可能会想到标准库。按照官网的说法,模块跟标准库是有点区别的。
我们平时在使用的时候,就认为他们是同一类就好了,别太深究。因为我说不清楚(笑脸)
有兴趣的可以去买一本Python标准库的书(一千多页),或者通过官网查找。
- os模块
os.remove() # 删除一个文件
os.getcwd() # 获取当前工作目录,即当前python脚本工作的目录路径
os.path.exists(path) # 如果path存在,返回True;如果path不存在,返回False
os.path.isfile(path) # 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) # 如果path是一个存在的目录,则返回True。否则返回False
- datetime模块
datetime.datetime.now() # 当前时间
datetime.datetime.now() + datetime.timedelta(3) # 当前时间+3
datetime.datetime.now() + datetime.timedelta(-3) # 当前时间-3
datetime.datetime.now() + datetime.timedelta(hours=3) # 当前时间+3小
datetime.datetime.now() + datetime.timedelta(minutes=30) # 当前时间+30
datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 转字符串格式
datetime.datetime.strptime('2019-10-01', "%Y-%m-%d") # 转时间格式
- json模块
import json
# 这是直接操作内存对象
dic = {'a1':'b1','a2':'b2','a3':'b3'}
str_dic = json.dumps(dic) # 序列化:将一个字典转换成一个字符串
print(type(str_dic),str_dic) # <class 'str'> {"a1": "b1", "a2": "b2", "a3": "b3"}
dic2 = json.loads(str_dic) # 反序列化:将一个字符串格式的字典转换成一个字典
print(type(dic2),dic2) # <class 'dict'> {"a1": "b1", "a2": "b2", "a3": "b3"}
# 这个是用来操作文件的
f = open('json_file','w')
dic3 = {'a1':'b1','a2':'b2','a3':'b3'}
json.dump(dic3,f) # dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
f.close()
f1 = open('json_file')
dic4 = json.load(f1) # load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
f1.close()
print(type(dic4),dic4)
- 安装第三方库
很简单的一条命令:pip install requests
可以在这个网址查找需要安装的第三方库:https://pypi.org/ - 常用第三方库
使用第三方模块,要先安装。其次去查看怎么使用。
比如我要获取一个网站的信息,可以通过requests这个模块快速获取。
三行代码轻松访问豆瓣首页
import requests
r = requests.get('https://www.douban.com/') # 豆瓣首页
print(r.text) # 整个网页的文本信息
所以说:第三方库非常方便开发,这也就是为什么Python这么强大。
Scikit-learn、TensorFlow、PyTorch、Theano、Keras
以上这些都是人工智能领域方向的第三方库,还有很多,不再一一例举。
注意:要使用第三方库,就是看他的官网文档。作为一个程序员,不会看文档,不会看源码。你就废了。