一.什么是模块
在Python中,一个.py文件
就称之为一个模块(Module)。
模块好处?:
- 方便重用代码,写完一个通用的模块,可以在很多地方直接拿来用
- 相同名字的函数和变量完全可以分别存在不同的模块中
二.使用模块
使用
Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用。
-
使用模块的第一步,就是通过
import
关键字导入模块:#1导入sys模块 import sys def test(): args = sys.argv #2使用该模块的变量 if len(args)==1: print('Hello, world!') elif len(args)==2: print('Hello, %s!' % args[1]) else: print('Too many arguments!') #Python解释器把一个特殊变量__name__置为__main__ if __name__=='__main__': test()
- 导入sys模块后,我们就有了
变量sys指向该模块
,利用sys这个变量,就可以访问sys模块的所有功能
。 sys模块有一个argv变量
,用list存储了命令行的所有参数
。- argv至少有一个元素,因为第一个参数永远是该.py文件的名称,例如:
运行python3 hello.py获得的sys.argv就是['hello.py']; 运行python3 hello.py Michael获得的sys.argv就是['hello.py', 'Michael']。
- 导入sys模块后,我们就有了
import 语句
想使用其他模块,只需在另一个模块里执行 import 语句
,语法如下:
import module1[, module2[,... moduleN]
实例
#support.py 文件代码
def print_func( par ):
print ("Hello : ", par)
return
test.py 引入 support 模块:
# 导入模块
import support
# 现在可以调用模块里包含的函数了
support.print_func("Runoob")
from … import 语句
Python 的 from 语句让你从模块中导入一个指定的部分到当前模块中,语法如下:
from modname import name1[, name2[, ... nameN]]
示例:要导入模块 fibo 的 fib 函数,使用如下语句:
from fibo import fib, fib2
fib(500)
#1 1 2 3 5 8 13 21 34 55 89 144 233 377
- 这样不会把整个fibo模块导入到当前的模块中,它只会将fibo里的fib函数引入进来。
from … import * 语句
把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:
from modname import *
包
包是一种管理 Python 模块命名空间的形式,采用". + 模块名称"。
- 比如一个模块的名称是 A.B, 那么他表示一个包 A中的子模块 B
。
1.用户可以每次只导入一个包里面的特定模块,比如:
import sound.effects.echo
#这将会导入子模块:sound.effects.echo。 他必须使用全名去访问:
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
2.还有一种导入子模块的方法是:
from sound.effects import echo
#这同样会导入子模块: echo,并且他不需要那些冗长的前缀,所以他可以这样使用:
echo.echofilter(input, output, delay=0.7, atten=4)
3.还有一种变化就是直接导入一个函数或者变量:
from sound.effects.echo import echofilter
#同样的,这种方法会导入子模块: echo,并且可以直接使用他的 echofilter() 函数:
echofilter(input, output, delay=0.7, atten=4)
-
注意当使用
from package import item
这种形式的时候,对应的 item 既可以是包里面的子模块(子包
),或者包里面定义的其他名称,比如函数,类或者变量
。-
import 语法会首先把
item 当作一个包定义的名
称,如果没找到,再试图按照一个模块去导入
。如果还没找到,抛出一个:exc:ImportError 异常
。 -
反之,如果使用形如
import item.subitem.subsubitem
这种导入形式,除了最后一项,都必须是
,而最后一项则可以是模块或者是包
,但是不可以是类,函数或者变量的名字。
-
作用域
一个模块中,但有的函数和变量允许给别人使用,有的函数和变量希望仅仅在模块内部使用。在Python中,是通过_前缀
来实现的。
-
正常的函数和变量名是
公开的(public)
,可以被直接引用 -
类似
__xxx__
这样的是特殊变量
,可以被直接引用,但是有特殊用途,比如上面的__author__,__name__
就是特殊变量, -
类似
_xxx和__xxx
这样的函数或变量就是非公开的(private)
,不应该被直接引用,比如_abc,__abc
等;- 之所以我们说,private函数和变量“不应该”被直接引用,而不是“不能”被直接引用,是因为
Python并没有一种方法可以完全限制访问private函数或变
量,但是,从编程习惯上不应该引用private函数或变量。
- 之所以我们说,private函数和变量“不应该”被直接引用,而不是“不能”被直接引用,是因为
请看例子:
def _private_1(name):
return 'Hello, %s' % name
def _private_2(name):
return 'Hi, %s' % name
def greeting(name):
if len(name) > 3:
return _private_1(name)
else:
return _private_2(name)
- 我们在模块里
公开greeting()函数
,而把内部逻辑用private函数
隐藏起来了,这样,调用greeting()
函数不用关心内部的private函数细节
,这也是一种非常有用的代码封装和抽象的方法,即:- 外部不需要引用的函数全部定义成
private
,只有外部需要引用的函数才定义为public
。
- 外部不需要引用的函数全部定义成
三.安装第三方模块
pip 是 Python 包管理工具,该工具提供了对 Python 包的查找、下载、安装、卸载
的功能。
-
软件包也可以在 https://pypi.org/ 中找到。
- 目前最新的 Python 版本已经预装了 pip。
安装pip
-
在命令提示符窗口下尝试运行
pip
,如果Windows提示未找到命令
,可以重新运行安装程序添加pip。 -
使用以下方法来安装:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 下载安装脚本 sudo python get-pip.py # 运行安装脚本
注意:用哪个版本的 Python 运行安装脚本,pip 就被关联到哪个版本,如果是 Python3 则执行以下命令: sudo python3 get-pip.py # 运行安装脚本。 一般情况 pip 对应的是 Python 2.7,pip3 对应的是 Python 3.x。
pip常用命令
1.查看是否已经安装 pip 可以使用以下命令:
pip --version
2.下载安装包使用以下命令:
pip install some-package-name
2.1.例如我们安装 numpy 包:
pip install numpy
2.2.安装包指定版本
pip install SomePackage # 最新版本
pip install SomePackage==1.0.4 # 指定版本
pip install 'SomePackage>=1.0.4' # 最小版本
3.我们也可以轻易地通过以下的命令来移除软件包:
pip uninstall some-package-name
3,1,例如我们移除 numpy 包:
pip uninstall numpy
4.如果要查看我们已经安装的软件包,可以使用以下命令:
pip list
5.升级 pip
pip install -U pip
如果这个升级命令出现问题 ,可以使用以下命令:
sudo easy_install --upgrade pip
6.升级包
pip install --upgrade SomePackage