模块和包+库的使用-9

模块与包

模块的作用

按功能点分割 文件、目录

python中的模块和包

在python中,代码是放在py为扩展名文件中的,一个.py文件就称之为一个模块(Module)

又可以把许多模块按照功能放到不同的目录中来组织模块

这些组织存放模块文件的目录,我们称之为包(package)

模块化的好处

以库形式封存功能,方便给别的代码调用

  库其实就是模块和包

  可以使用自己写的库,python标准库,第三方库

避免变量名冲突(包括函数名)

  如果一个代码文件特别的大,变量的名字容易发生重复

  需要想出不同的变量名或者函数名

  如果采用模块分割代码,每个模块文件代码都不是很多,就可以大大的缓解这个问题

  每个模块中的变量名作用域只在本模块中

自定义模块

模块的定义

所谓模块其实就是一个py文件,定义模块就是创建py文件

  以前我们创建的py文件就都是一个模块

模块名就是py文件名(不包括.py)比如 test.py

模块的标识符(identifier)可以包含供外部使用

  变量(一些常量,比如配置项)

  函数(供其它模块调用)

  类

配置项通常大写

一个例子

calc.py里面有函数calc_s_c可以计算参数的平方和立方

我们就有了一个模块calc

var1 = 20

def calc_s(num):

  print ('square of num is %s' %num**2)

def calc_c(num):

  print ('cube of num is %s' %num**3)

def calc_s_c(num):

  print ('square of num is %s' % num**2)

  print ('cube of num is %s' % num**3)

使用calc模块里面的方法一

import module

import module1,module2,module3

可以调用模块里面所有的变量

import calc

calc.calc_s_c(20)

calc.calc_s(10)

print (calc.var1)

别名

import module as newname

  长名字缩短

  防止同名(苦A里面有until,库B里面也有Util)

import calc as c

c.calc_s_c(20)

c.calc_s(10)

print (c.var1)

使用calc模块里面的方法二

from module import var

from calc import calc_s_c

calc_s_c(20)

from module import var1,var2

from calc import calc_s_c,var1

calc_s_c(20)

print (var1)

方法二优缺点

  可以少输入前缀

  一般用在大量调用的情况下,少输入一些字符

  但是如果代码新增调用,需要修改import语句

别名

from module import var as newname

  长名字缩短

  防止同名

from calc import calc_s_c as csc

csc(20)

全部导入

from module import *

form calc import *

calc_s_c(20)

print (var1)

一般不建议使用

  潜在的污染名字空间危险

  from m1 import calc

  from m2 import *   若m2里面也有calc,会覆盖m1里的calc

自定义包

什么是包

将功能相关的模块放到相应的目录结构中来组织模块。

这些组织存放模块文件的目录,我们称之为包(Package)

包的结构

Phone/

  __init__.py                  前后两个下划线,初始化文件,包的初始化文件,如果没有需要,可以为空文件

  common_util.py

  Voicedta/

    __init__.py

    Pots.py

    Isdn.py

  Fax/

    __init__.py

    G3.py

  Mobile/

    __init__.py

    Analog.py

    Digital.py

顶层的包 Phone

子包  Voiceata、Fax、Mobile

包初始化文件 __init__.py

  可以是空文件

  也可以包含初始化操作

  特殊用法:定义 __all__=[]

  from package XX import *时,

  告诉解释器包含它的目录是一个Python:python3.3+

包里面的各个模块文件

调用包内模块的方法

方法一

import Phone.Mobile.Analog

Phone.Mobile.Analog.dial()

方法二

from Phone.Mobile import Analog

Analog.dial()

方法三

from Phone.Mobile.Analog import dial

dial()

模块与包-库的使用

使用标准库

标准库

Python安装包里面提供的功能模块和包

主要包括

内置类型和函数

  比如len、int、open等

  直接使用,无需import

功能模块

  包含程序设计所需的常用的功能

  需要用import导入它们就可使用

根据Python文档查看使用细节

例一

需要获取系统当前时间,只需要导入时间库time

import time

time.strftime("%Y_%m_%d %H:%M:%S")

例二

调用外部的计算器程序,只需要导入OS操作库OS

import os 

os.system("calc")

Python的标准库非常丰富,使用搜索引擎 搜索一下即可

  最好是google,英文搜索

  比如 模拟http请求

模块搜索规则

问题

import 或者from...import 时,解释器如何找到模块文件的?

  解释器程序直接包含的,无需寻找 

  比如sys(sys.builtin_module_names)

  sys.path

>>>import sys

>>>sys.path

sys.path的值

sys.path的值是怎么来的?

  自动加入启动脚本所在的目录

  自动加入标准库目录 (D:\\tools\\Python36开头的)

  PYTHONPATH环境变量里包含的目录。这是一个环境变量设置,如果没有设置则忽略。该环境变量设置和PATH环境变量的设置方法类似

标准库模块、第三方模块

一般都安装在lib或者lib/site-packages目录

可以搜索到,无需我们操心

自定义的模块

一般当前的项目根目录是当前工作目录

根据路径依次指明即可 import Phone.Mobile.Digital

如果不在当前工作目录

  可以加到PATHONPATH         set PYTHONPATH 只对当前工作目录有效,重新打开一个shell无效     ;run.bat文件(内容:set PYTHONPATH                    python python文件)

  也可以直接写入sys.path中       sys.path.append(‘d:\\  \\  \\’)  \\表示不转义或者sys.path.append(r'd:\ \ \')

安装第三方库

  开发者是全世界的程序员

  第三方库和标准库的区别:不是解释器安装后内置的

  安装好以后,其导入使用的方式和内置库、自己开发的库没有任何区别

安装方式

下载,拷贝到项目工程目录下面

官方源PyPI(Python Package Index)官方可以使用Pip安装,类似yum、apt-get、apm

Pip使用

Pip在新版的Python解释器安装好后就有了

命令格式 pip install <第三方库名称>,pip执行文件在环境变量中

例子  pip install Django

有时可以使用国内豆瓣的源 pip install Django -i https://pypi.douban.com/simple/

卸载命令 pip unistall Django

指定版本

pip install SomePackage==1.0.4 #specific version

pip install ‘SomePackage >=1.0.4’ #minmum version

更新安装 pip install selenium -U

导入内容是模块会使用模块里面的内容,导入内容是目录会使用init文件

python -m 表示执行一个模块,模块寻找:sys.path

 

 

 

 

 

 

  

 

posted @ 2018-02-01 15:16  午间小憩  阅读(132)  评论(0编辑  收藏  举报