python包模块实例
来源:互联网 发布:什么是网络对接 编辑:程序博客网 时间:2024/06/09 17:42
例子1:
一 实例和结果
PyPackage│ PyCommonM.py│ __init__.py│├─p1Package│ P1M.py│ P1MC.py│ __init__.py│└─p2 P2.py P2M.py
2) PyCommonM.py
def PyCommonMF(): print "PyCommonMF"
3) P1M.py:
def P1MF(): print 'P1MF'
4) P1MC.py:
class P1MC(): @staticmethod def P1MCF(): print 'P1MCF'
5)P2M.py:
def P2MF(): print 'P2MF'
6) P2.py:
import P2Mfrom PyPackage import PyCommonMfrom PyPackage.p1Package import P1Mfrom PyPackage.p1Package.P1MC import P1MCdef P2F(): print 'P2F' if __name__ == '__main__': P2F() P2M.P2MF() P1M.P1MF() P1MC.P1MCF() PyCommonM.PyCommonMF()
7) 运行p2.py的结果:
P2FP2MFP1MFP1MCFPyCommonMF
二 解释
* 一个py文件为一个module,例如module: PyCommonM.py,P2M.py,P1MC.py, P1M.py 。
* 包含__init__.py的文件夹为一个package,例如package: PyPackage,p1Package。
* 可以直接使用import来引用相同目录下的其他的module, 例如p2.py中的import P2M。
* 通过from import来引用其他的目录下且属于某个package的module,例如py.py中的from PyPackage import PyCommonM 和 from PyPackage.p1Package import P1M。
* 通过from import来引用某个module中的类,例如from PyPackage.p1Package.P1MC import P1MC
注意package所在的目录必须在pythonpath环境变量中。
转载来源:http://www.cnblogs.com/itech/archive/2011/04/26/2029587.html
例子2:
package目录下有module1.py, module2.py, __init__.pymodule1.py内容如下:def func1(): print("func1 function")module2.py内容如下:def func2(par): print ("func2 function") return__init__.py内容如下:from module1 import func1from module2 import func2
与package文件夹在同一目录下的文件test.py,内容如下:
import package
package.func1()
package.func2('test func2')
输出结果如下:
func1 function
func2 function
注:要把package目录路径放置在PYTHONPATH环境变量中
参考:http://www.w3cschool.cc/python/python-modules.html
1 模块(Module)和包(Package)
1.1 命名空间(Namespace)
由于在Python中一切皆为对象(Object), 想要好好理解Module和Package,一定要先理解Namespace的概念。 所谓Namespace,是指标示符的可见范围。对于Python而言,常见的Namespace主要有以下几种:
- Build-in Namespace (内建命名空间)
- Global Namespace (全局命名空间)
- Local Namespace (局部命名空间)
有了命名空间的概念,可以有效的解决函数或者是变量重名的问题。不同的命名空间中允许出现相同的函数名或者 是变量名。它们彼此之间不会相互影响,例如在Namespace A和B中同时有一个名为var的变量,对A.var赋值并不 会改变B.var的值。
1.2 模块(Module)
Python中的一个Module对应的就是一个.py文件。其中定义的所有函数或者是变量都属于这个Module。这个Module 对于所有函数而言就相当于一个全局的命名空间。而每个函数又都有自己局部的命名空间。
# test.py '''This is only a test module'''age = 0def printHello(): print "Hello, world!"if __name__ == '__main__': printHello()
我们可这样来使用这个module, 用t来作为test的别名
import test as t>>> t.age0>>> t.age = 11>>> t.printHello()Hello, world!>>> print t.__doc__This is only a test module
当然,我们也可以这样来使用:
>>> form test import *>>> age0>>> printHello()
你一定有注意到'__main__'的条件判断,由于每一个module都有__name__的属性,只有当直接运行 这个module的时候,__name__属性才会等于__main__。当它被import的时候,你可以完全当它不存在。
1.3 包(Package)
所谓Package, 就是一堆module的集合,也就一堆.py文件。 你可以用如下方式来创建一个package
- 新建一个folder名为test
- 在test文件夹下新建一个空的__init__.py文件。
- 在test文件夹下新建下py文件,名为a.py
# a.pydef sayHello(): print "Hello, world!">>> import test.a as t>>> t.sayHello()Hello, world!
Package 提供了一种很好的管理module的方式,可以有效的减少module的命名conflict,保持较好的树型结构。
转载来源:http://blog.csdn.net/huangkangying/article/details/32348665#t0
python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。下面将具体介绍几种常用情况:
(1)主程序与模块程序在同一目录下:
如下面程序结构:
`-- src
|-- mod1.py
`-- test1.py
若在程序test1.py中导入模块mod1, 则直接使用import mod1或from mod1 import *;
(2)主程序所在目录是模块所在目录的父(或祖辈)目录
如下面程序结构:
`-- src
|-- mod1.py
|-- mod2
| `-- mod2.py
`-- test1.py
若在程序test1.py中导入模块mod2, 需要在mod2文件夹中建立空文件__init__.py文件(也可以在该文件中自定义输出模块接口); 然后使用 from mod2.mod2 import * 或import mod2.mod2.
(3)主程序导入上层目录中模块或其他目录(平级)下的模块
如下面程序结构:
`-- src
|-- mod1.py
|-- mod2
| `-- mod2.py
|-- sub
| `-- test2.py
`-- test1.py
若在程序test2.py中导入模块mod1和mod2。首先需要在mod2下建立__init__.py文件(同(2)),src下不必建立该文件。然后调用方式如下:
下面程序执行方式均在程序文件所在目录下执行,如test2.py是在cd sub;之后执行python test2.py
而test1.py是在cd src;之后执行python test1.py; 不保证在src目录下执行python sub/test2.py成功。
import sys
sys.path.append("..")
import mod1
import mod2.mod2
(4)从(3)可以看出,导入模块关键是能够根据sys.path环境变量的值,找到具体模块的路径。这里仅介绍上面三种简单情况。
原文地址:http://hi.chinaunix.net/?253639/viewspace-25422
- python包模块实例
- python语法31[包模块实例]
- python语法31[包模块实例]
- Python中import包和模块实例
- Python 模块和包
- Python模块包
- Python类、模块、包
- Python模块和包
- Python 模块和包
- python模块和包
- Python类,模块,包
- python 模块和包
- python 包 模块导入
- Python类、模块、包
- Python模块和包
- python 包 模块 文件
- python模块包
- Python模块和包
- horizontalScrollView做滑动标签时的移动
- NotRxJava懒人专用指南
- 几个比较好的代码托管地址
- 设置Java导出Excel表头
- hihocdoer 1163 : 博弈游戏·Nim游戏
- python包模块实例
- 【Android学习笔记】Android概述与开发环境搭建
- [OpenJudge-NOI]走出迷宫 Bfs
- Postgresql pg_hba.conf配置文件小结
- JVM系列五:JVM监测&工具
- 怎么实现在MindMapper中关于文件链接的添加
- App Store最新审核指南
- Android中级篇之Fresco-加载图片基础[详细图解Fresco的使用]
- 使用Quartz任务调用的时候报错Based on configured schedule, the given trigger will never fire.