Python中包(package)的调用方式
一.什么是Python Package
如何区分你看到的目录是一个Python Package包呢?其实很简单,你只要看这个名录下是否有“__init__.py”这个文件就好了,如果有那么就是Python Package包,如果没有,就说嘛你看到的就是个普通的目录,如下图,你就可以看出来"calcuate"和"Log"就是一个Python Package包,而"yinzhengjie"就是一个目录,而判断的依据就是是否包含_init__.py文件。"yinzhengjie"这个目录下包含三个文件,即“calcuate”,“Log”和“bin.py"文件。

二.主程序调用包中的模块
目录结构如上图所示,以下是其中各个文件中的代码。
sc_cal

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6
7 import logging as log
8
9 def GetLogger():
10 logger = log.getLogger()
11
12 fh = log.FileHandler("log.txt")
13
14 logger.addHandler(fh)
15
16 return logger

以下是bin主程序的代码。

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6
7 from Log import logger
8
9 from calcuate import sc_cal
10
11 obj = logger.GetLogger()
12
13 obj.error("This yinzhengjie's test error !")
14
15 s1 = sc_cal.Add(100,200)
16
17 print(s1)
18
19
20
21 #以上代码执行结果如下:
22 300

执行主程序代码之后,会在执行的目录中生成一个名称为“log.txt”的文件。
1 This yinzhengjie's test error !
三.包中模块的调用

目录结构如上图所示,以下是其中各个文件中的代码。
以下是bin主程序的代码。

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6
7 from Log import logger
8
9 from calcuate import sc_cal
10
11 obj = logger.GetLogger()
12
13 obj.error("This yinzhengjie's test error !")
14
15 s1 = sc_cal.Add(100,200)
16
17 print(s1)
18
19
20
21
22 #以上代码执行结果如下:
23 30
24 300

四.同级目录下的被调用模块之间的相互调用

目录结构如上图所示,以下是其中各个文件中的代码。
1>.Log 包中的源代码
2>.calcuate 包中的源代码
3>.bin 包中的源代码

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6
7 import os,sys
8
9
10 AbsolutePath = os.path.abspath(__file__) #将相对路径转换成绝对路径
11
12 SuperiorCatalogue = os.path.dirname(AbsolutePath) #相对路径的上级路径
13
14 BaseDir = os.path.dirname(SuperiorCatalogue) #在“SuperiorCatalogue”的基础上在脱掉一层路径,得到我们想要的路径。
15
16 sys.path.insert(0,BaseDir) #将我们取出来的路径加入到Python的命名空间去,并将该目录插入在第一个位置中。
17
18 from Log import logger
19
20 from calcuate import sc_cal
21
22
23 obj = logger.GetLogger()
24
25 obj.error("This yinzhengjie's test error !")
26
27 s1 = sc_cal.Add(100,200)
28
29 print(s1)
30
31
32
33 #以上代码执行结果如下:
34 30
35 300

执行主程序代码之后,会在执行的目录中生成一个名称为“log.txt”的文件。
五.包的多级调用

目录结构如上图所示,以下是其中各个文件中的代码。

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6
7 import logging as log
8
9
10 def GetLogger():
11 logger = log.getLogger()
12
13 fh = log.FileHandler("log.txt")
14
15 logger.addHandler(fh)
16
17 return logger

主程序代码如下:

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6
7
8 from Log.Loger import logger as log
9
10 obj = log.GetLogger()
11
12 obj.error("This yinzhengjie's test error !")

执行主程序代码之后,会在执行的目录中生成一个名称为“log.txt”的文件。
六.__name__的应用

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6
7 print("This is Test Page !")
8
9 def foo():
10 print("ok")
11
12
13
14 if __name__=="__main__": # 推荐使用这种方式调试代码,只有执行当前模块的人才会执行以下代码,如果是别人调用该模块,以下的代码是不会被执行的!
15 foo()
16
17 print(__name__)
18
19
20
21
22
23
24 #以上代码执行结果如下:
25 This is Test Page !
26 ok
27 __main__


1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 #@author :yinzhengjie
4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
5 #EMAIL:y1053419035@qq.com
6
7
8 import name
9
10
11
12 #以上代码执行结果如下:
13 This is Test Page !
14 name

Python中包(package)的调用方式的更多相关文章
- python中的三种输入方式
python中的三种输入方式 python2.X python2.x中以下三个函数都支持: raw_input() input() sys.stdin.readline() raw_input( )将 ...
- 实验 7 : OpenDaylight 实验 —— Python 中的 REST API 调用
实验 7 : OpenDaylight 实验 -- Python 中的 REST API 调用 一.实验 目的 对 Python 调用 OpenDaylight 的 REST API 方法有初步了解. ...
- ## Python中的Package和Jupyter中import包问题
前言 关于python包的一些知识 Java中的package概念 我们知道在java中的import package概念, java中的包就是一个目录,里面包含着子目录,子目录套着子目录,当需要引入 ...
- python中包的语法
1.什么是包? 包是一种通过".模块名"来组织python模块名称空间的方式.我们穿件的每个文件夹都可以被称为包. 但是要注意, 在python2中规定. 包内必须存在__init ...
- python中包和模块的使用说明
python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包.只要模块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用. 如果想 ...
- Python 中包/模块的 `import` 操作
版权声明:博客为作者原创,允许转载,但必须注明原文地址: https://www.cnblogs.com/byronxie/p/10745292.html 用实例来说明 import 的作用吧. 创建 ...
- Python的包package的导入与被导入(包的类和方法的导入,__init__()怎么写)
包package的导入与被导入: 参考一下: https://blog.csdn.net/guowujun321/article/details/80764468 1.文件目录: | |-- A/ ...
- python中函数的定义,调用,全局变量,局部变量,函数的嵌套使用-初级篇
函数的基本概述 在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上到下实现功能,可以思考一下如果有某个功能的代码是在多个地方使用的是否可以只写一次?此时的代码该如何定义.先观察以下的案例: ...
- python类变量的分类和调用方式
#!/usr/bin/python # -*- coding: UTF-8 -*- # 父类 class JustCounter: ''' 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中 ...
随机推荐
- Win记录-配置Windows Server R 2008多用户远程连接(仅做参考)
1.计算机管理下用户组下新建用户 2.系统属性下远程控制加入用户,设置允许运行任何远程桌面 3.运行->gpedit.msc->计算机配置->管理模板->windows 组件- ...
- 01-VS充当IIS的配置步骤
一. 背景 在实际开发中,经常会遇到需要在线调试,比如:第三方支付的回调.App接口借助PostMan工具测试,需要在代码上直接加断点,来进行调试,VS默认是不支持这种方式,需要手动配置一下,才能达到 ...
- 从数据库中修改zabbix的验证方式 0 内置 1 LDAP 2 HTTP
MariaDB [zabbix]> select authentication_type from config ; +---------------------+ | authenticati ...
- CSS——超链接颜色设置
<!-- 链接颜色 --> a:link { color:#FF0000; text-decoration:underline; } a:visited { color:#00FF00; ...
- Linux - 包不同安装方式
rpm 软件包管理器 安装编译包好的二进制包 方式 rpm -ivh lynx # rpm安装 rpm -e lynx # 卸载包 rpm -e lynx --nodeps # 强制卸载 rpm -q ...
- CF28D Don't fear, DravDe is kind
传送门 题意:\(n\)个位置,每个位置有价值\(v_i\)和重量\(p_i\),要选出一些位置,如果要选位置\(i\),那么前面选的重量之和要为\(l_i\),后面选的重量之和要为\(r_i\),求 ...
- Android学习笔记——Content Provider(一)
Content Provider是Android系统四大组件之一: 官方的定义是:A Content Provider manages access to a central repository o ...
- Python字符串解析方法汇总
Python字符串方法解析 1.capitalize 将首字母大写,其余的变成小写 print('text'.capitalize()) print('tExt'.capitalize()) 结果: ...
- http://blog.csdn.net/w_e_i_/article/details/70766035
http://blog.csdn.net/w_e_i_/article/details/70766035
- tidb 架构~tidb 理论学习(1)
一 简介:介绍新型NEW SQL数据库tidb 二 目的: tidb出现的目的,就是代替mysql+中间件,实现横向水平扩展 三 核心理论观点 1 MySQL 是单机数据库,只能通过 XA 来满足跨数 ...