Python_Note_08Day 5_Module

Python之路【第四篇】:模块

模块,用一砣代码实现了某个功能的代码集合。 

类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。

如:os 是系统相关的模块;file是文件操作相关的模块

模块分为三种:

  • 自定义模块
  • 内置模块
  • 开源模块

 一、自定义模块

1、定义模块

情景一:

  

情景二:

   

情景三:

   

2、导入模块

 Python之所以应用越来越广泛,在一定程度上也依赖于其为程序员提供了大量的模块以供使用,如果想要使用模块,则需要导入。导入模块有一下几种方法:

1 import module                            #直接导入已知开源模块
2 from module.xx.xx import xx           #导入模块中的class
3 from module.xx.xx import xx as rename    #导入模块中的class,并可以重命名代入。
4 from module.xx.xx import *         

导入模块其实就是告诉Python解释器去解释那个py文件

  • 导入一个py文件,解释器解释该py文件
  • 导入一个包,解释器解释该包下的 __init__.py 文件

那么问题来了,导入模块时是根据那个路径作为基准来进行的呢?即:sys.path

1 import sys
2 print sys.path
3 
4 #Outcomes:
5 ['', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/home/tlfox/.local/lib/python3.5/site-packages', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages']

如果sys.path路径列表没有你想要的路径,可以通过 sys.path.append('路径') 添加。
通过os模块可以获取各种目录,例如:

1 import sys
2 import os
3 
4 pre_path = os.path.abspath('../')
5 sys.path.append(pre_path)
View Code

 

二、开源模块

1. 下载安装

下载安装有两种方式:

1 yum 
2 pip
3 apt-get
4 ...
View Code
1 下载源码
2 解压源码
3 进入目录
4 编译源码    python setup.py build
5 安装源码    python setup.py install
View Code

注:在使用源码安装时,需要使用到gcc编译和python开发环境,所以,需要先执行:

1 yum install gcc
2 yum install python-devel
3 4 apt-get python-dev

安装成功后,模块会自动安装到 sys.path 中的某个目录中,如:

/usr/lib/python2.7 or python3.x

2. 导入模块

同自定义模块中导入的方式

 

 

三、三层架构

project_01

├── conf.py
├── index.py     # 作为主文件,程序入口,即程序执行时,先执行的文件.index再会去触发其他model的其他类或其他类里的方法.
├── model      # 在此文件夹中,数据库有几张表,就建立几个文件,并与数据库的名要一一对应
  ├── __init__.py
  └── admin.py

└── utility     # 存放公共操作的功能的py文件. 比如: 存放对数据库进行操作的功能. 对一类的操作都通过utility下的py文件去执行.
  ├── __init__.py
  └── mysql_helper.py

 

index.py

 1 from model.admin import Admin
 2 
 3 def main():
 4 
 5 # Call Admin.GetOne() -> MysqlHelper.ShowTables()
 6     sql = 'select * from students'
 7     data = Admin()
 8     data01 = data.GetOne(sql) 
 9     print(data01)
10     
11 # Call Admin.GetOne_where()  -> MysqlHelper.SelectData()
12     sql02 = 'select * from students where name=%s'
13     parameters = ('alex',)
14     data02 = data.GetOne_where(sql02,parameters)
15     print(data02)    
16 #注:可以用input把输入数据代入。
    name = input('please enter the name you want to search out: ')
    Parameters = (name,) 17 if __name__ == "__main__": 18 main()

 

├── model    
  └── admin.py

 1 import sys
 2 sys.path.append('../')           # How to import a python module from another folders.
 3 from utility.mysql_helper import MysqlHelper
 4 
 5 class Admin(object):
 6 
 7     def __init__(self):
 8         self.__helper = MysqlHelper('127.0.0.1','root','Tl198312!')   #self.__helper equals a class variable.
 9                 
10     
11     def GetOne(self,sql):
12         data = self.__helper.ShowTables(sql)
13         return (data)
14 
15     def GetOne_where(self,sql,parameters):
16         data = self.__helper.SelectData(sql,parameters)
17         return (data)
18 
19     
20 if __name__ == "__main__":
21     sql = 'select * from students'
22 #you have to assign the Class Admin() to data first, and then call the method of GetOne(sql).
23     data = Admin()
24     data01 = data.GetOne(sql) 
25     print(data01)
26     sql02 = 'select * from students where name=%s'
27     parameters = ('alex',)
28     data02 = data.GetOne_where(sql02,parameters)
29     print(data02)
30     
31 #TypeError: GetOne() missing 1 required positional argument:'sql'
32     #data = Admin.GetOne1(sql) 
33     #print(data) or print(Admin.GetOne1(sql) 

 

 └── utility   

  └── mysql_helper.py

 1 import MySQLdb
 2 
 3 class MysqlHelper(object):
 4     def __init__(self,Host, Name, Password):
 5         self.Host = Host
 6         self.Name = Name
 7         self.Password = Password
 8     
 9 
10     def ShowTables(self,sql):
11         conn = MySQLdb.connect(host=self.Host,user=self.Name ,passwd=self.Password,db='mydb')
12         cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)
13 
14         reCount = cur.execute(sql)
15 
16         #print (cur.fetchone())
17         data = cur.fetchall()
18 
19         cur.close()
20         conn.close()
21         
22         return data
23     
24     def SelectData(self,sql,parameters):
25         conn = MySQLdb.connect(host=self.Host,user=self.Name ,passwd=self.Password,db='mydb')
26         cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)
27 
28         reCount = cur.execute(sql,parameters)
29 
30         #print (cur.fetchone())
31         data = cur.fetchall()
32 
33         cur.close()
34         conn.close()
35         
36         return data
37 
38 
39 if __name__ == "__main__":
40 #注:self的参数代入和类的方法参数代入是不一样的。
41     helper = MysqlHelper('127.0.0.1','root','Tl198312!')
42     sql = 'select * from students'
43     data = helper.ShowTables(sql)
44     sql02 = 'select * from students where id=%s'
45     parameters = (1,)
46     data02 = helper.SelectData(sql02,parameters)
47     print(data)
48     print(data02)

 

总结:每层只能调用相邻层,而不能跨层调用。

三层结构:

  • 数据访问层
  • 业务处理层
  • 表示层,UI层

 

posted @ 2018-03-10 09:57  tlfox_2006  阅读(165)  评论(0编辑  收藏  举报