python模块与包


路径修改

命令行怎么查看路径,修改路径:


#打印当前搜索路径

import sys
sys.path
sys.path.append(newname)
import os
os.getcwd()
os.chdir("c:\\www\\")

模块实现

构建模块的初衷就是将一些同类的东西进行打包, 以免污染全局空间, 在python的模块里, 对需要隐藏的属性和函数都可以采用__all__来实现, __all__只给出列出想要公共接口和属性, 当前前提是只使用 from modu import *来导入库, 如果使用import modu 则会导入所有的属性; 如下面的模块”Lot2Html”(下面的代码内容不重要):

 #coding=utf-8
 '''
 定义了一个模块,提供将log.txt转换成html的格式
 '''
from OHtml import *
import re
OH = OHtml()  #这是其它地方定义的一个类
 #这里只公开creTaskLog这个接口
__all__ = ["creTaskLog"]   
def dealLogStr(line):
    pass
def __parseTaskLog(logf):
    pass
def creTaskLog(logf,htmlf,title):
    '''
    将测试log文件创建html各式的文件
    :param logf: from log path and filename
    :param htmlf:  to log path and filename
    :param title: html title
    '''
    ostr,errstr,skpstr = __parseTaskLog(logf)
    f=open(htmlf,'w+')
    htmlstr = OH.creHtml(ostr,title=title,errStr=errstr,skStr=skpstr)
    f.write(htmlstr)
    f.close()

当在其它地方使用这个模块时, 可以使用from Log2Html import *或者import Log2Html ,而这两者存在区别,
1. imprt Log2Html 导入时, 模块里的所有函数都可以被调用, 也就是all对其没有影响;
2. from Log2Html import *则是优先处理了__all__ 中的, 如果有该属性则值提供__all__ 里面的属性, 如这里只能读到creTaskLog函数, 其它函数都被封装; 奇怪的是, 网上的资料说如果没有__all__ 则会读取所有不是以下划线开头的属性, 而我这里测试发现, 外部可以照样访问 __parseTaskLog 函数, 还不清楚什么原因;

总结: 推荐使用from Log2Html import *__al__ 属性达到封装效果;


包处理

当前测试的包名为OHtml, 同名文件夹里有__init__.py 和上面的”Log2Html.py” 等其他模块;
这里也主要分析包的封装特性;
先在测试代码里文档里加入路径:

import sys
sys.path.append("F:\\Python\\OHtml")
  1. 这时__init__里面什么也不写, 用import OHtmlfrom OHtml import * 后,发现都找不到模块Log2Html,可见 对于包的导入,必须在初始化文档里加入想要导出的模块信息;
  2. __init__里面加上import Log2Html 后,可以正常访问模块里面的所有函数, 当然要加上OHtml的前缀,如OHtml.Log2Html.creTaskLog
  3. __init__将上面的import Log2Html 改为__al__=["Log2Html"]后,发现使用import OHtml是无法读取到模块的, 只能使用from OHtml import* 才可以, 切此时可以访问到Log2Html;模块的所有属性, 好像没有封装;

总结: package的使用, __init__ 是必须要添加所要导出的模块的, 可以通过写__al__ 和 import … 来完成;

而这两者之间的区别,目前还不是很清楚, 以后有机会再去拜读下源码;


import 导入操作制发生一次;
要重新导入则一个del module后再操作

对比

import是直接导入整个内容, 操作的修改会修改内存中的整个module的数据;
from 是到复制版本, 修改内容不会影响到原先内存中的module;

模块就是命名空间

通过moud.__dict__.keys() 可以看到里面的属性(包含定义的一些变量 和一些本来就有的变量)

如:

moud.__file__是路径;
moud.__dco__是说明字符

reload

热加载功能, 就是修改源文件后不关闭程序重新加载文件的新内容;

import moud
 # do something
from imp import reload
reload(moud)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值