python:12:模块和包

第一章:python

第12节:模块

1,模块的概念

一个文件被看作是一个独立模块,一个模块也可以被看作是一个文件。模块的文件名就是模块的名字加上扩展名(.py)。

2,模块导入及路径导入

模块不在搜索路径内,会导致路径搜索失败,模块导入失败;
所以要添加导入模块的搜索路径,在添加的搜索路径下添加模块;
搜索路径保存在sys模块的sys.path变量里,它包含每个独立路径的列表。
>>> import sys
>>> sys.path
['', 'D:\\python2_7_14\\Lib\\idlelib', 'C:\\Windows\\system32\\python27.zip', 'D:\\python2_7_14\\DLLs', 'D:\\python2_7_14\\lib', 'D:\\python2_7_14\\lib\\plat-win', 'D:\\python2_7_14\\lib\\lib-tk', 'D:\\python2_7_14', 'D:\\python2_7_14\\lib\\site-packages']
当前路径作为优先导入模块的路径,所以自定义的模块不要和已知模块重名
可以通过sys.path.append()添加搜索路径
>>> sys.path.append('/home/wesc/py/lib')
如果添加的列表包含模块文件,模块便可导入,如果有特殊需要,可使用insert()方法操作(加到路径的首部);
如果一个模块有多个拷贝,解释器会延搜索路径顺序找到第一个模块,并导入,在sys.path路径前面的模块会优先导入;
sys.models,可查看哪些模块在哪些位置,结果会返回一个字典,模块名为键(key),物理地址为值(value);
(在linux操作系统上,命令行模式下输入rpm -l python ,可查看python模块安装路径)

可用import语法导入模块
>>> import string, re, os
>>> from Bio import SeqIO
from-import语句,相当于导入模块,并使用该模块的特定属性
语法规则:
from module import name1[, name2[, ···nameN]]
从一个模块空间中导入多个属性:
from module import *
但只在两种场合下建议使用这个方法,
一,目标模块中的属性非常多,反复键入不方便
二,在交互解释器下,可以减少输入次数

3,模块特点

python的脚本都是用扩展名为py的文本文件保存的,一个脚本可以单独运行,也可以导入另一个脚本中运行,当脚本被导入运行时,我们将其称为模块(module);
模块名与脚本的文件名相同;
例如编写一个名为Items.py的脚本,则可以在另外一个脚本中用import Items语句来导入它;
在一个新的脚本中,导入了Items模块,则在这个脚本中会存在Items脚本内的所有内容,所以最好在Items模块中定义函数,但不定义数值,而在新脚本中,调用Items中的函数,并进行赋值计算,要运用Items中的函数,则要输入Items.add,即模块名.函数名。

4,用户自定义模块的方法

如果一个脚本cal.py在执行一个1/2的计算,而在new.py脚本中存在一个import cal导入模块,则执行python new.py则相当于执行python cal.py的作用
如果cal.py想作为模块被调用,其脚本中存在一个执行程序,当输入python cal.py时,脚本内部的执行运算程序执行,当cal.py被当做模块调用时,又不想在被调用时执行内部程序,可借用如下方法。
利用__name__这个属性;当输入:
>>> print __name__
当输入python cal.py 打印出__name__
当输入python new.py,在new.py当中调用了cal(import cal)打印出cal
所以根据__name__打印出调用模块的名称的这一特性,根据调用结果判断name的值
所以可以在调用的脚本中加入:
if __name__ == "__main__":
····operator (2, "*", 3)
输出的结果是,运行脚本本身时执行operator函数,而该脚本被当作模块导入时,不执行operator函数。
模块的执行文件分为以下几种,*.py,*.pyc,*.pyo

5,模块实例

计算,加减乘除运算的模块脚本写法
#!/usr/bin/python
#coding:utf8
from __future__ import division#导入精确除法函数
def jia(x,y):
····return x+y
def jian(x,y):
····return x-y
def cheng(x,y):
····return x*y
def chu(x/y):
····return x/y
def operator(x, o, y):
····if o== '+':
········print jia(x,y)
····elif o== '-':
········print jian(x,y)
····elif o== '*':
········print cheng(x,y)
····elif o== '/':
········print chu(x,y)
····else:
········pass
if __name__ = "__main__":
····operator(2, '*', 3)
另外一个实例:
输出的整数带有千分符:
thousands.py文件

#coding:utf8
def thousands(number):
    number=str(number)
    if len(number) > 3:
        atsite=len(number)%3
        count=len(number)/3 #need int() type
        opt_list=[]
        opt_list.append(number[:atsite])
        for x in range(1,count+1):
            opt_list.append(',')
            opt_list.append(number[atsite:][(x-1)*3:x*3])
        opt_str=''.join(opt_list)
        if opt_str.startswith(','):
            opt_str=opt_str[1:]
    else:
        opt_str=number
    return opt_str

if __name__ == "__main__":
    pass
    #thousands(100000)

例如这个文件放入python_packages目录下,另外一个脚步在使用这个模块时需要输入如下命令

import sys
sys.path.append('/home/xxx/python_packages')
import thousands
thousands.thousands(100000) #得到100,000的结果
#第一个thousands表示"thousands.py"这个文件,第二个thousands表示文件中的thousands这个函数
6,包

Python的模块可以按照目录组织成为包
创建一个包的步骤如下:
-建立一个包名字的文件夹
-在该文件夹下创建一个__init__.py文件(这个文件内可以没有内容)
-根据需要在该文件夹下存放脚本文件,或是脚本的已编译文件或子包
包的特性;
1,模块是一个可以导入的python脚本文件
2,包是一堆按照目录组织的模块和子包,目录下的__init__.py文件存放了包的信息
3,可以用import,import as,from import等语句导入模块和包

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值