python module package

Python中的模块(module)和包(package)

分类: Python学习笔记 56人阅读 评论(0) 收藏 举报

创建一个模块(module)

一个module不过是一些函数,class放在一个文件中

  1. """
  2. this only is a very simple test module
  3. """
  4. age = 0 #sample attribute
  5. def sayHello(): #a sample function in a module
  6. "Hello"
  7. if __name__ == "__main__":
  8. sayHello()
"""
this only is a very simple test module
"""

age = 0 #sample attribute

def sayHello(): #a sample function in a module
    "Hello"

if __name__  == "__main__":
    sayHello()
    


  1. >>> import testModule
  2. >>> testModule.__doc__
  3. '\nthis only is a very simple test module\n'
  4. >>>
>>> import testModule
>>> testModule.__doc__
'\nthis only is a very simple test module\n'
>>> 

  1. >>> testModule.age
  2. 0
  3. >>> testModule.age = 1
  4. >>> testModule.age
  5. 1
  6. >>> testModule.sayHello
  7. <function sayHello at 0x00000000030FE400>
  8. >>> testModule.sayHello()
>>> testModule.age
0
>>> testModule.age = 1
>>> testModule.age
1
>>> testModule.sayHello
<function sayHello at 0x00000000030FE400>
>>> testModule.sayHello()

可以看到,通过modname.attribute 的方式可以访问,module中的attribute,在module中的定义的变量,函数class都是module的attribute。用namespace 的概念来解释就方便多了,module中的namespace中的一切都是module中的attribute,反过来说module的attribute是module的namespace中的一个name。

怎么查找module

1.在当前目录中查找testmodule.py

2.若没找到,在环境变量中查找,就像在PATH中查找一样

3.若无PYTHONPATH变量,那么在安装目录中查找,在unix中是.:/usr/local/lib/python 其实python是在sys.path中的所有目录中查找module的,可以查看sys.path

  1. >>> import sys
  2. >>> sys.path
  3. ['C:/Users/Administrator/Desktop', 'E:\\Python33\\Lib\\idlelib', 'C:\\Windows\\system32\\python33.zip', 'E:\\Python33\\DLLs', 'E:\\Python33\\lib', 'E:\\Python33', 'E:\\Python33\\lib\\site-packages']
  4. >>>
>>> import sys
>>> sys.path
['C:/Users/Administrator/Desktop', 'E:\\Python33\\Lib\\idlelib', 'C:\\Windows\\system32\\python33.zip', 'E:\\Python33\\DLLs', 'E:\\Python33\\lib', 'E:\\Python33', 'E:\\Python33\\lib\\site-packages']
>>> 

在查找顺序上看,我们可以知道如果你在当前目录建立了一个和标准库中带有的标准module有相同的名字那木你会用你的module代替系统module,会产生莫名其妙的问题,所以我们要注意,自己的module名字不要和系统的module名字相同


Package(包)

package是一组module的集合,用一下的方法创建一个package。package是一种组织module的方法,提供了一个namespace,防止放生名字冲突。package中还可以有package,所以这种方式可以很好的组织一个树状结构,用来管理modules


namespace(命名空间)

什么是namespace?就是从名称到对象上的映射。当一个name映射到一个object上时,我们说这个name和之歌object有绑定(bind)关系,或者说是这个name指向这个object。

Python中有很多namespace,常用的有:build-in namespace(内在命名空间) global namespace(全局命名空间)local namespace (局部命名空间) 在不同的namespace中的name一点关系也没有。改变local namespace总的name 的bind关系,不会影响到global namespace中相同的name。

每一个object,如module class function 一个instance,都有自己的namespace。namespace是动态创建的。每个namespace的生存时间也不一样的。

一个module的namespace是这个module被import的时候创建的。

有一个特殊的module,一进入python的解释器,就建立了一个的module,这个module的namespace就是global namespace,一个全局唯一的namespace。这个module的一个内部的attribute,__name__用来标示module,这个module的__name__是__main__。


LGB的规则用scope的概念来解释就是:在任何代码执行的时候,都至少有三个scope,一个是local namespace 组成的scope。一个是当前module的global namespace 组成的scope,还有build-in namespace 组成的scope。从内到外一次查找一个unqualified name。L-local G-global B-buildin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值