python模块和包讲解:如何安装和下载常用模块

东尧爱分享

这是东尧每天一篇文章的第30天

东尧写文章的目标:分享东尧的经验和思考,帮你获取物质和精神两方面幸福。

模块和包是python中经常用到的概念,那么python模块究竟是什么意思,如何安装和下载模块呢?常用的python模块又有哪些?

1

模块的概念

在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。当代码量变得相当大的时候,我们最好把代码分成一些有组织的代码段,前提是保证他们的彼此交互。这些代码片段相互间有一定的联系,可能是一个包含数据成员和方法的类,也可能是一组相关但彼此独立的操作函数。

这些代码段是共享的,所以python允许“调入”一个模块,允许使用其他模块的属性来利用之前的工作成果,实现代码重用。这个把其他模块中属性附加到你的模块中的操作叫做导入(import)。那些自我包含并且有组织的代码片段就是模块(module)。在Python中,一个.py文件就称之为一个模块(Module)。

01

模块的命名空间(名称空间)

要使用一个模块中的属性和方法,那么就必须在属性和方法的前面使用模块名加点(.)操作符来使用它们。比如之前用到过的random模块,要使用random模块的randint方法,我们需要使用random.randint()的方式来使用。

import random

random.randint(1,100)

02

模块的搜索路径

当我们导入一个模块的时候,python首先会搜索当前路径(导入模块的路径)下有没有该模块,如果没有的话那么就会去系统的环境变量中搜索,如果都搜索不到,就会报ImportError异常。

如果当前路径下有模块名跟系统的模块名重名,那么当前的模块会覆盖掉系统的模块(所以尽量不要跟系统的模块重名,否则就无法使用系统的模块的功能)。

模块名不要和系统模块名冲突,最好先查看系统是否已存在该模块,检查方法是在Python交互环境执行import abc,若成功则说明系统存在此模块。

import sys

print(sys.path)

备注:如果我们自己有写模块和包,那一定要记得将自定义的模块文件夹复制到Python文件路径的Lib文件夹下,这样才会避免出现根据加载路径找不到模块的错误。如果没有复制过去的话,我们可以用sys.path.append()的方法,将自定义模块的加载路径添加进去。

sys.path.append('D:\\learning\\python\\learning')

2

导入模块

01

import语句

# 一行导入一个模块

import urllib

import re

# 一行导入多个模块

import urllib, sys, random

02

python导入模块的顺序

python标准库模块

python第三方模块

自定义模块

每个部分用一个空行分开

03

python模块作用域

解析器执行到这条语句(import),如果在搜索路径中找到了指定模块,就会加载它。该过程遵循作用域原则,如果在一个模块的顶层导入,那么它的作用域就是全局的;如果在函数中导入,它的作用域是局部的。

将re模块导入的顺序和hello()函数调换之后就可以正常执行了:

import urllib # urllib模块在之后的代码中均能使用

def hello():

re.findall('','')

import random

print(random.randint(1,100))

import re

hello() # 如果hello()函数在导入re模块后才调用的话,函数内的re.findall()就可以执行

让我们再来看一个模块在函数体内导入的情况。如果在函数中导入,它的作用域是局部的,如果在函数外部再调用,会报NameError错误:

import urllib # urllib模块在之后的代码中均能使用

def hello():

import random

print(random.randint(1,100)) # 这里可以执行

hello()

random.randint(1,100) # 这里不能再使用了,因为函数内导入的模块作用域只在函数体内

结果是函数内部的random执行成功,外部的报错了:

31

Traceback (most recent call last):

File "D:/learning/python/learning/test1.py", line 10, in

random.randint(1,100) # 这里不能再使用了,因为函数内导入的模块作用域只在函数体内

NameError: name 'random' is not defined

除了模块有作用域以外,模块间涉及到的函数也有其作用域。比如在一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用。那这个具体该如何实现呢?

明天的教程中将继续为您讲解。明天的教程内容预告,欢迎继续关注:

·模块变量的作用域;

·如何导入一个模块的部分方法;

·导入的模块如何重命名;

·如何安装第三方模块来提高工作效率;;

·“包”相关知识;

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180507G0SVE600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券