【Python之旅】第三篇(四):Pythoh模块

说明:

    函数可以将代码的实现细节隐藏起来,而模块则可以在一个py文件中放置多个函数,通过模块的导入,即可调用这多个函数,当然也可以将一个函数作为一个py文件,无论是哪一种方式,这个py文件,都可以称为一个模块。更普遍来说,py文件都可以作为一个模块,通过import导入来进行使用。

    这里说的模块应该是类似于sys或者os之类的模块,而不是普通的py文件。可以将多个python包放在一个目录中,通过__init__的初始化方法制作一个python包,import导入之后即可以使用。

    因此,这里需要提及的应该是下面的内容:


1

2

3

1.模块的制作与调试方法

2.包的制作

3.常用模块的使用方法


1.模块的制作与调试方法

(1)模块的制作

·模块制作如下:


1

2

3

4

5

6

7

8

9

10

11

12

#!/usr/bin/env python

 

print 'This module is made by xpleaf.'

 

def sayHi():

    print "Hello, I'm xpleaf"

 

def Work(work):

    print "Your work is %s" % work

 

def Salary(money):

    print 'Your salary is %s' % money

·如果直接执行,则只会显示非函数部分:


1

2

xpleaf@xpleaf-machine:/mnt/hgfs/Python/day3$ python my_module1.py

This module is made by xpleaf.

(2)模块调试方法

-在交互器中调试

·可以在交互器中导入模块,使用上面的函数功能:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

>>> import tab

>>> import my_module1    ===>导入模块不用加.py后缀

This module is made by xpleaf.    ===>非函数部分会直接执行

>>> my_module1.    ===>按tab键会显示该模块下可以执行的方法

my_module1.Salary(            my_module1.__name__

my_module1.Work(              my_module1.__new__(

my_module1.__class__(         my_module1.__package__

my_module1.__delattr__(       my_module1.__reduce__(

my_module1.__dict__           my_module1.__reduce_ex__(

my_module1.__doc__            my_module1.__repr__(

my_module1.__file__           my_module1.__setattr__(

my_module1.__format__(        my_module1.__sizeof__(

my_module1.__getattribute__(  my_module1.__str__(

my_module1.__hash__(          my_module1.__subclasshook__(

my_module1.__init__(          my_module1.sayHi(

>>> my_module1.sayHi()    ===>执行模块中的函数

Hello, I'm xpleaf

>>> my_module1.Work('CEO')

Your work is CEO

>>> my_module1.Work('Student')

Your work is Student

>>> my_module1.Salary('None')

Your salary is None

·也可以只导入该模块中的某个函数:


1

2

3

4

>>> from my_module1 import sayHi

This module is made by xpleaf.

>>> sayHi()

Hello, I'm xpleaf

-直接在bash中调试

·每次都要进入交互器并且import调试显然有些麻烦;

·可以在模块文件中添加name方法直接在bash中调试;

·上面代码修改如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#!/usr/bin/env python

 

print 'This module is made by xpleaf.'

 

def sayHi():

    print "Hello, I'm xpleaf"

 

def Work(work):

    print "Your work is %s" % work

 

def Salary(money):

    print 'Your salary is %s' % money

 

if __name__ == '__main__':    #判断被主动执行还被import导入调用

    sayHi()               #主动执行时,将会执行该name语句块后面的内容

    Work('Student')       #import导入调用时,将不会执行该name语句块后面的内容

    Salary('None')

·执行结果如下:


1

2

3

4

5

6

a.直接在bash中执行

xpleaf@xpleaf-machine:/mnt/hgfs/Python/day3$ python my_module1.py

This module is made by xpleaf.

Hello, I'm xpleaf

Your work is Student

Your salary is None

·在交互器中执行与第一种调试方法是一样的;


2.包的制作

·将多个模块文件打包在一起时,考虑使用包;

·my_packets目录下有下面几个模块:


1

2

xpleaf@xpleaf-machine:/mnt/hgfs/Python/day3$ ls my_packets/

caculate.py  my_module1.py

·my_dule1.py内容与上面一样,caculate.py代码如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#!/usr/bin/env python

 

print 'This modules can help you to do some caculates.'

 

def add(num1,num2):

    print '%s + %s is:%s' % (num1,num2,num1+num2)

 

def cut(num1,num2):

    print '%s - %s is:%s' % (num1,num2,num1-num2)

 

def multiply(num1,num2):

    print '%s * %s is:%s' % (num1,num2,num1*num2)

 

def div(num1,num2):

    print '%s / %s is:%s' % (num1,num2,num1/num2)

·要想通过import方法就能导入my_packets包,需要在该目录下创建__init__.py文件,并添加相应内容,演示如下:


1

2

3

xpleaf@xpleaf-machine:/mnt/hgfs/Python/day3$ touch my_packets/__init__.py

xpleaf@xpleaf-machine:/mnt/hgfs/Python/day3$ vim my_packets/__init__.py

__all__ = ['my_module1','caculate']    #使用该包下的模块,需要在这里添加,否则无法使用

·在交互器中演示如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

>>> import tab

>>> from my_packets import *    ===>导入my_packets包下的所有模块

This module is made by xpleaf.

This modules can help you to do some caculates.

>>> caculate.    ===>便可以使用caculate模块下的相应函数功能

caculate.__class__(         caculate.__reduce__(

caculate.__delattr__(       caculate.__reduce_ex__(

caculate.__dict__           caculate.__repr__(

caculate.__doc__            caculate.__setattr__(

caculate.__file__           caculate.__sizeof__(

caculate.__format__(        caculate.__str__(

caculate.__getattribute__(  caculate.__subclasshook__(

caculate.__hash__(          caculate.add(

caculate.__init__(          caculate.cut(

caculate.__name__           caculate.div(

caculate.__new__(           caculate.multiply(

caculate.__package__        

>>> my_module1.    ===>便可以使用my_module1模块下的相应功能

my_module1.Salary(            my_module1.__name__

my_module1.Work(              my_module1.__new__(

my_module1.__class__(         my_module1.__package__

my_module1.__delattr__(       my_module1.__reduce__(

my_module1.__dict__           my_module1.__reduce_ex__(

my_module1.__doc__            my_module1.__repr__(

my_module1.__file__           my_module1.__setattr__(

my_module1.__format__(        my_module1.__sizeof__(

my_module1.__getattribute__(  my_module1.__str__(

my_module1.__hash__(          my_module1.__subclasshook__(

my_module1.__init__(          my_module1.sayHi(


3.常用模块的使用方法

·可以参考个人相关文档,这里先不作提及。

时间: 2024-09-13 04:10:05

【Python之旅】第三篇(四):Pythoh模块的相关文章

JAVA之旅(三十四)——自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫

JAVA之旅(三十四)--自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫 我们接着来说网络编程,TCP 一.自定义服务端 我们直接写一个服务端,让本机去连接,可以看到什么样的效果 package com.lgl.socket; import java.io.IOException; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; publ

【Python之旅】第二篇(四):字典

说明:     显然Python中字典的学习过程与列表是一样的,主要是围绕下面的函数来进行重点学习: 1 2 3 4 5 6 7 8 9 10 11 >>> xpleaf. xpleaf.clear( xpleaf.copy( xpleaf.get( xpleaf.has_key( xpleaf.items( xpleaf.keys( xpleaf.pop( xpleaf.popitem( xpleaf.setdefault( xpleaf.update( 1.基本操作 --创建一个字典

【Python之旅】第二篇(三):基于列表处理的购物清单程序

1.基本需求     编写一个购物小程序,要求实现如下功能: (1)让用户输入工资: (2)输出购物菜单及产品价格: (3)计算用户是否可支付: (4)输出用户剩余的钱,问用户是否继续购物,如果选择继续,则继续进行,否则退出程序: (5)若钱不够,输出用户还需要工作多久才能买得起(这里暂不实现此功能). 2.实现基本思路     基本思路可如下所示:     在编写程序的时候即以该思路为主线,具体细节下面再提及. 3.实现细节     基于友好用户界面的原则,实现的细节可总结如下: (1)用户输

【Python之旅】第一篇:基于文件处理的登陆接口

1.基本需求     编写登陆接口,实现如下需求: (1)输入用户名密码 (2)认证成功后显示欢迎信息 (3)输错三次后锁定 2.实现细节 ·每添加一个用户,需要手动添加三个文件 文件 功能 username_count.txt 记录用户输错密码的次数,最大为3次,如果用户密码输入正确,则重置为0,默认为0 username_lock.txt 记录用户是否被锁定,1表示锁定,0表示未锁定,默认为0 username_passwd.txt 记录用户的密码 ·注:username是指该用户的用户名,

【Python之旅】第二篇(五):基于列表、字典和元组的员工信息处理接口

1.基本需求     编写一个查询员工信息表的程序,实现如下功能: (1)让用户输入不小于3个字符查询员工信息 (2)通过员工号或员工个人信息可以精确或模糊查询到员工信息 (3)输出员工信息 2.实现代码与注释    首先提供员工信息的txt文件: 1 2 3 4 xpleaf@xpleaf-machine:/mnt/hgfs/Python/day3$ more student_info.txt  stu1101 mingjia.xu 275896019@qq.com 263 SystemAdm

【Python之旅】第二篇(二):列表与元组

说明:     Python中的列表类似于其它高级语言中的数组,不过Python的列表操作起来要轻松很多.     Python中列表的学习主线主要是围绕对列表参数的操作使用上,重点关注的应该有如下这些: 1 2 3 4 5 6 7 8 9 names.append( names.count( names.extend( names.index( names.insert( names.pop( names.remove( names.reverse( names.sort(     下面的内容

【Python之旅】第二篇(一):Python文件处理

说明:     主要是file()和open()函数的使用,但在查open()函数的帮助时,会有下面的说明: 1 2 3 >>> help(open) -- Open a file using the file() type, returns a file object.     因此,两个函数其实都是一样的,下面只用file().     在列举file()的作用时,使用help即是很好的方法,下面则是应重点关注的内容: 1 2 3 4 5 6 7 8 9 10 11 12 13 14

【Python之旅】第二篇(九):迭代器

说明:关于Python中迭代器的解释     Iterator是迭代器的意思,它的作用是一次产生一个数据项,直到没有为止.这样在 for 循环中就可以对它进行循环处理了.那么它与一般的序列类型(list, tuple等)有什么区别呢?它一次只返回一个数据项,占用更少的内存.但它需要记住当前的状态,以便返回下一数据项.它是一个有着next()方法的对象.而序列类型则保存了所有的数据项,它们的访问是通过索引进行的.     举个前面的例子来说就像readlines和xreadlines的区别,rea

【Python之旅】第二篇(七):集合

说明: ·类似于数学中学的集合,Python中的集合可以实现去重的功能,通过set()函数来实现: ·sets支持x in set, len(set)和 for x in set: ·作为一个无序的集合,sets 不记录元素位置或者插入点,因此,sets不支持indexing, slicing,或其它类序列(sequence-like)的操作: ·学习集合,主要是学习集合的一系列标准操作:集合创建.集合添加.集合删除.交并差集等: 1.创建集合:set() 1 2 3 4 5 6 7 8 9 1

【Python之旅】第二篇(六):enumerate枚举

1.普通情况下打印列表中索引号及其对应元素     使用下面的循环: 1 2 3 4 5 6 7 8 >>> L = ['a', 'b', 'c', 'd'] >>> for i in L: ...   print L.index(i),i ...  0 a 1 b 2 c 3 d 2.使用enumerate在循环时同时访问索引     可以使用enumerate实现上面的功能: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18