# 模块
## 1\. Python中的模块
有过C语言编程经验的朋友都知道在C语言中如果要引用`sqrt函数`,必须用语句`#include <math.h>`引入math.h这个头文件,否则是无法正常进行调用的。
那么在Python中,如果要引用一些其他的函数,该怎么处理呢?
在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用`sqrt函数`,必须用import关键字引入math这个模块,下面就来了解一下Python中的模块。
说的通俗点:模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块
## 2\. import
在Python中用关键字`import`来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入。
形如:
~~~
import module1,mudule2...
~~~
当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。
在调用math模块中的函数时,必须这样引用:
~~~
模块名.函数名
~~~
* 想一想:
> 为什么必须加上模块名调用呢?
* 答:
> 因为可能存在这样一种情况:在多个模块中含有相同名称的函数,此时如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。所以如果像上述这样引入模块的时候,调用函数必须加上模块名
~~~
import math
#这样会报错
print(sqrt(2))
#这样才能正确输出结果
print(math.sqrt(2))
~~~
有时候我们只需要用到模块中的某个函数,只需要引入该函数即可,此时可以用下面方法实现:
~~~
from 模块名 import 函数名1,函数名2....
~~~
不仅可以引入函数,还可以引入一些全局变量、类等
* 注意:
> * 通过这种方式引入的时候,调用函数时只能给出函数名,不能给出模块名,但是当两个模块中含有相同名称函数的时候,后面一次引入会覆盖前一次引入。也就是说假如模块A中有函数function( ),在模块B中也有函数function( ),如果引入A中的function在先、B中的function在后,那么当调用function函数的时候,是去执行模块B中的function函数。
>
> * 如果想一次性引入math中所有的东西,还可以通过from math import \*来实现
>
## 3\. from…import
Python的from语句让你从模块中导入一个指定的部分到当前命名空间中
语法如下:
~~~
from modname import name1[, name2[, ... nameN]]
~~~
例如,要导入模块fib的fibonacci函数,使用如下语句:
~~~
from fib import fibonacci
~~~
### 注意
* 不会把整个fib模块导入到当前的命名空间中,它只会将fib里的fibonacci单个引入
## 4\. from … import \*
把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:
~~~
from modname import *
~~~
### 注意
* 这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。
## 5\. as
~~~
In [1]: import time as tt
In [2]: time.sleep(1)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-2-07a34f5b1e42> in <module>()
----> 1 time.sleep(1)
NameError: name 'time' is not defined
In [3]:
In [3]:
In [3]: tt.sleep(1)
In [4]:
In [4]:
In [4]: from time import sleep as sp
In [5]: sleep(1)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-5-82e5c2913b44> in <module>()
----> 1 sleep(1)
NameError: name 'sleep' is not defined
In [6]:
In [6]:
In [6]: sp(1)
In [7]:
~~~
## 6\. 定位模块
当你导入一个模块,Python解析器对模块位置的搜索顺序是:
1. 当前目录
2. 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
3. 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/
4. 模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
- 计算机组成原理和Python基础知识
- 计算机组成原理
- 编程语言和Python
- 开发第一个Python程序
- 注释
- 变量以及类型
- 标识符和关键字
- 输出
- 输入
- 运算符
- 数据类型转换
- 判断语句和循环语句
- 判断语句介绍
- if语句
- 比较、关系运算符
- if...else...语句格式
- if...elif...else语句格式
- if语句的嵌套
- if应用:猜拳游戏
- 循环语句介绍
- while循环
- while循环应用
- while循环的嵌套以及应用
- for循环
- break和continue
- 字符串、列表、元组、字典
- 字符串介绍
- 字符串输出
- 字符串输入
- 下标和切片
- 字符串常见操作
- 列表介绍
- 列表的循环遍历
- 列表的常见操作
- 列表的嵌套
- 元组
- 字典介绍
- 字典的常见操作1
- 字典的常见操作2
- 字典的遍历
- 集合(扩展)
- 公共方法
- 4.函数(一)
- 4.1.函数介绍
- 4.2.函数定义和调用
- 4.3.函数的文档说明
- 4.4.函数参数(一)
- 4.5.函数返回值(一)
- 4.6.函数的嵌套调用
- 4.7.函数应用:打印图形和数学计算
- 5.函数(二)
- 5.1.局部变量
- 5.2.全局变量
- 5.3.多函数程序的基本使用流程
- 5.4.函数返回值(二)
- 5.5.函数参数(二)
- 5.6.拆包、交换变量的值
- 5.7.引用(一)
- 5.8.可变、不可变类型
- 5.9.引用(二)
- 5.10.函数使用注意事项
- 6.强化练习
- 6.1.函数应用:学生管理系统
- 6.2.递归函数
- 6.3. 匿名函数
- 6.4.列表推导式
- 6.5.set、list、tuple
- 6.6.高阶函数: map reduce filter
- 7.文件操作,综合应用
- 7.1.文件操作介绍
- 7.2.文件的读写
- 7.3.应用1:制作文件的备份
- 7.4.文件的相关操作
- 7.5.应用:批量修改文件名
- 7.6.综合应用:学生管理系统(文件版)
- 8.面向对象(上)
- 8.1.认识面向对象编程
- 8.2.类和对象
- 8.3.定义类
- 8.4.创建对象
- 8.5.添加和获取对象的属性
- 8.6.在方法内通过self获取对象属性
- 8.7.魔法方法 - init()
- 8.8.魔法方法 - 有参数的__init__()方法
- 8.9.魔法方法 - str()方法
- 8.10.魔法方法 - del()方法
- 8.11.实操案例 - 烤土豆
- 9.面向对象(中)
- 9.1.实操案例 - 放家具
- 9.2.继承的概念
- 9.3.单继承
- 9.4.多继承
- 9.5.子类重写父类的同名属性和方法
- 9.6.子类调用父类同名属性和方法
- 9.7.多层继承
- 9.8.通过super()来调用父类的方法
- 10.面向对象(下)
- 10.1.私有属性和私有方法
- 10.2.修改私有属性的值
- 10.3.多态
- 10.4.类属性和实例属性
- 10.5.静态方法和类方法
- 11.异常处理与模块初识
- 11.1.异常
- 11.2.捕获异常
- 11.3.异常的传递
- 11.4.抛出自定义的异常
- 11.5.获取异常完整信息的正确姿势
- 11.6.认识模块
- 11.7.开发模块
- 11.8.模块中的__all__(未完成)
- 11.9.python中的包(未完成)
- 12.课后加餐
- 12.1.基础应用 - 进销存管理系统(未完成)
- 12.2.基础应用 - 员工信息管理系统(未完成)
- 12.1.编码规范 - PEP8编码规范(未完成)