人工智能入门与实战第一季:python基础语法

什么是模块
python程序是由一个个的模块组成的,而每一个模块又包含对应功能的代码:比如函数、变量、类、其他代码段等等。
我们在第一章讲写第一个python程序的时候,曾经通过集成开发环境IDLE创建了一个python的程序文件:lovechina.py,这个文件就是一个模块。尽管它只有两个打印语句,但也是一个模块。
所以python中的模块是以.py为后缀的文件,我们可以通过模块避免变量、函数的命名冲突,以及方便的对代码进行组织、和管理。
模块的分类:
1、系统模块,也叫标准模块
我们在第二章讲到数学函数的时候第一次使用了python标准模块库中的数学模块:math.py
# 导入math库
import math
# 幂运算
print(math.pow(2,3))
标准模块库中还有一个内置模块:builtins.py,我们最早接触的print()、len()、max()等函数便来至于此内置模块,内置模块是系统默认导入到解释器中的,所以我们无需导入这个模块。
所有标准库请到python官网查看:https://docs.python.org/zh-cn/3/
2、第三方模块
由第三方开发人员提供,以下列举部分第三方模块。
数据分析:numpy、scipy、pandas
机器学习:Scikit-learn、Tensorflow
web开发:Django、Flask
…
第三方模块使用之前需要安装,例如安装numpy,在终端输入命令:
pip install numpy
由于mac系统默认安装了python2.x版本,使用pip则表示使用的是python2.x版本,如果使用python3.x版本安装,应使用pip3
由于安装第三方库,有时候还会有连串的依赖问题,所以安装第三方库更简单的方式是使用Anaconda,我们在讲到python科学计算库的时候会介绍它的安装和使用…
3、自定义模块
我们创建的任意一个后缀为.py的模块,都是自定义模块。
导入模块的几种方式
1、import module1, module2…
最常用的导入模块的方式,将一个或多个模块导入,导入模块一般在写在文件的最上方。
我们前面举的导入数学模块的例子:
import math
# 幂运算
print(math.pow(2,3))
2、from module_name import name1, name2 …
从某个模块导入某个或多个指定内容
from math import pow
# 无需使用模块名称math,可直接使用pow方法
print(pow(2, 3))
# 导入math模块中的所有内容
from math import *
print(pow(2, 3))
print(floor(1.2))
3、import…as…
我们把导入的模块或函数进行重命名
# 导入模块,并重命名
import math as my_math
print(my_math.pow(2, 3))
sys.path 的使用
sys是标准模块之一,sys.path包含解释器查找模块的路径,当你导入一个模块时,解释器将会从这些路径中去查找这个模块,我们可以打印出来看一下它里面的路径:
import sys
print(sys.path)
为了解释sys.path的作用,接下来我们举例:
1、我们先创建一个main文件夹,里面创建一个模块:se1_ch9_module_package.py,然后再创建另外一个test_path1文件夹,里面创建一个模块:se1_ch9_test_path1.py,如下图所示:
2、此时我们会发现se1_ch9_module_package.py模块与se1_ch9_test_path1.py模块不在同一个目录下,接下来我们想在前者模块中导入后者模块,并调用后者模块的test函数:
from test_path1 import se1_ch9_test_path1
se1_ch9_test_path1.test()
我们发现报错了!为什么?我们在上面说了,当我们导入一个模块时解释器会从sys.path中的所有路径中去查找有没有这个模块,很明显../test_path1/ 这个路径并不在sys.path中。
3、解决这个问题很简单,在sys.path中加入这个路径即可,在se1_ch9_module_package模块中做以下操作:
方式1:在sys的path中加入当前模块的上一层路径
sys.path.append("../")
再打印sys.path 我们会发现多了一个路径'../'
print(sys.path)
我们发现此时可以正常导入se1_ch9_test_path1模块
from test_path1 import se1_ch9_test_path1
se1_ch9_test_path1.test()
方式2:在sys的path中加入test_path1路径
sys.path.append("../test_path1")
可以直接导入模块
import se1_ch9_test_path1
se1_ch9_test_path1.test()
包
包用来管理我们创建的模块,包的出现可以解决如下问题:
1、我们在实际的开发过程中会创建多个模块,这些模块需要分类管理
2、解决命名冲突问题:不同的开发者之间可能会创建相同名称的模块,甚至相同名称的模块下会有相同的函数,如果开发人员在一个项目开发程序、或者你写的程序提供给别人使用的时候,都会产生命名冲突的问题。
创建包
1、在对应的文件夹下右键,New-Python Package
成功创建包之后,会默认生成init.py模块。
2、创建包举例:比如我们给别人写一个播放器,我们创建了一个player_package包,然后创建一个player_manager.py模块,里面写一个play函数;创建一个ui子包,子包中可以继续创建和ui界面相关的模块。
导入包
以上述创建的player_package包为例,在主模块se1_ch9_module_package中导入player_package包:
首先在se1_ch9_module_package中加入如下代码:
#在sys的path中加入当前模块的上一层路径
sys.path.append("../")
以下为几种导入包的方式:
1、第一种导入方式:包名.模块名
import player_package.player_manager
# 调用play方法,使用时需要携带包名
player_package.player_manager.play()
输出结果:
播放...
2、第二种导入方式:from 包名 import 模块名
from player_package import player_manager
player_manager.play()
3、第三种导入方式:from 包名 import *
使用这种导入方式需要在被导入包的init.py文件中 事先定义好要被导入的模块,否则将无法导入。
-
在player_package包的init.py中加入如下代码:
__all__ = ['player_manager']
好了,这样我们在主模块中使用 from player_package import *,就可以把player_manager模块导入进来了。
from player_package import *
player_manager.play()
- 同样,如果我们希望把ui包中的player_controller模块导入进来,需要在ui包中的init.py模块中加入如下代码:
__all__ = ['player_controller']
然后在主模块中导入player_controller模块:
from player_package.ui import *
player_controller.show()
输出结果:
展示播放界面
本章总结:
本章应该比其他章节内容少一些,也简单一些,主要了解什么是模块,怎么创建模块,怎么导入模块,然后了解什么是包,怎么创建包和导入包即可。
本章就到这里,我是猪弟爸爸,这里我会持续更新人工智能自学内容,有问题请关注我的公众号zhudipapa,我会统一在公众号下方回复,我们下节见。