仅为个人查阅使用,如有错误还请指正。

在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-learnTensorFlowPyTorchTheanoKeras

以上这些都是人工智能领域方向的第三方库,还有很多,不再一一例举。

注意:要使用第三方库,就是看他的官网文档。作为一个程序员,不会看文档,不会看源码。你就废了