【Python】从入门到上头— 使用包、模块、安装第三方模块(7)

一.什么是模块

在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']。
      

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函数或变量。

请看例子:

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

  1. 在命令提示符窗口下尝试运行pip,如果Windows提示未找到命令,可以重新运行安装程序添加pip。

  2. 使用以下方法来安装:

    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

猜你喜欢

转载自blog.csdn.net/qq877728715/article/details/132562577