python自己编写模块

       摘要:我们在学习Python的过程中,经常会有重复的代码,或者项目工程过大,这个时候我们把一些代码写成模块的形式调用时很方便的,同时学会怎么编写模块,也有助于我们观看其他人的代码,提高分析纠错的能力,下面将介绍Python模块的基本概念以及如何编写自己的模块。
        

        1.1  模块的意义

        引用:http://www.infoq.com/cn/articles/Python-writing-module
        随着对Python学习的深入,其优点日渐突出,让读者也感觉到Python的强大了,强大感觉之一就是“模块自信”,因为Python不仅有自带的模块(称之为标准库),还有海量的第三方模块,并且很多开发者还在不断贡献自己开发的新模块,正是有了这么强大的“模块自信”,Python才被很多人钟爱。并且这种方式也正在不断被其他更多语言所借鉴,几乎成为普世行为了(不知道Python是不是首倡者)。
“模块自信”的本质是:开放。
          Python不是一个封闭的体系,而是一个开放系统。开放系统的最大好处就是避免了“熵增”。
熵的概念是由德国物理学家克劳修斯于1865年所提出,是一种测量在动力学方面不能做功的能量总数,也就是当总体的熵增加,其做功能力也下降,熵的量度正是能量退化的指标。熵亦被用于计算一个系统中的失序现象,也就是计算该系统混乱的程度。根据熵的统计学定义,热力学第二定律说明一个孤立系统倾向于增加混乱程度。换句话说就是对于封闭系统而言,会越来越趋向于无序化。反过来,开放系统则能避免无序化。
大家经常使用的一些模块语句例如:
>>> import math
>>> math.pow(3,3)
27.0
         就是最常见的调用math模块。然后使用求幂函数,模块的最大好处就是不用自己编写,拿过来就用,也是python适用于现代编程的原因之一,开源,库。

1.2模块是什么

那模块究竟是什么呢,“模块是程序”,它就是一个扩展名为.py的程序,我们平常写的Python程序进过简单的修改都可以变成模块,下面举个例子。
我建立了一个名为hi.py的文件,在里面写了两句:
#codeing = utf-8
word= "hi,python"
事实上它已经是一个模块了,下面我写了一个test.py的文件,调用这个模块:
import  sys
sys.path.append("hi.py")

import hiprint hi.word

运行test.py :
C:\Python27\python.exe D:/RUANJIAN/shuju/mpdule_test.py
hi python
我们看看我们做了什么:
1.编写了hi.py模块,在模块中定义了变量word     
2.编写了test.py,在模块中添加了test.py所在的路径
3.引用hi模块
4.引用模块中内容
一个普通的python程序在其他程序中添加路径,就可以调用,是不是很简单?有的人就会有疑问,那么为什么我们improt 的math就没有引用呢,那是因为系统模块在生成的时候就记录了模块的所在位置,相当于系统有一个目录,目录上有math但是没有我们的hi所以我们直接import会报错。
sys.path.append("hi.py")
  用这种方式告诉Python解释器,我写的那个文件在哪里。在这个方法中,也用了模块import sys,不过由于sys是Python标准库之一,所以不用特别告诉Python解释器其位置。如果读者使用的是Windows系统,请学习路径方面的知识。

1.3模块中添加函数和私有公有概念

俗话说:简单的谁都会。现在我们复杂我们的模块:
# coding:utf-8


public_variable = "Hello, I am a public variable."

_private_variable = "Hi, I am a private variable."


def public_teacher():

    print "I am a public teacher, I am from JP."


def _private_teacher():

    print "I am a private teacher, I am from CN."

同样是hi.py我们修改成如上的内容,模块中添加了两个变量public_variable、_private_variable,两个函数
def public_teacher()和def _private_teacher(),(pulic公有变量:函数外可以调用,_private私有变量,函数内调用)现在我们在命令框中使用它们:
>>> sys.path.append("D:\RUANJIAN\shuju")
>>> import hi
>>> hi.public_variable
'Hello, I am a public variable.'
>>> _private_variable
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name '_private_variable' is not defined
变量public_variable能够被使用,但是另外一个变量_private_variable不能被调用,先观察一下两者的区别,后者是以单下画线开头的,这样的是私有变量。而from pp import *的含义是“希望能访问模块(pp)中有权限访问的全部名称”,那些被视为私有的变量或者函数或者类,当然就没有权限被访问了,但是这个对函数有例外,具体同学们可以研究研究, 例如:
>>> hi.public_teacher()
I am a public teacher, I am from JP.
>>> hi._private_teacher()
I am a private teacher, I am from CN.

1.4进一步改进我们的模块:

修改刚刚的代码如下:
# coding:utf-8


__all__ = ['_private_variable', 'public_teacher']


public_variable = "Hello, I am a public variable."

_private_variable = "Hi, I am a private variable."


def public_teacher():

    print "I am a public teacher, I am from JP."


def _private_teacher():

        print "I am a private teacher, I am from CN."

重复之前的工作:
>>> hi.public_variable
'Hello, I am a public variable.'
>>> hi._private_variable
'Hi, I am a private variable.'
  在修改之后的 pp.py中,增加了__all__变量以及相应的值,在列表中包含了一个私有变量的名字和一个函数的名字。这是在告诉引用本模块的解释器,这两个东西是有权限被访问的,而且只有这两个东西。 曾经不能被访问的私有变量现在可以访问了。

1.5包和库:

可以简单的理解,我们刚刚写的hi.py是一个模块,一个包包含许多模块,组成库。
包可以看做是目录,包含很多.py文件,那么如何引用包呢?
我们新建立my_bao文件夹,在文件中写两个文件hi.py和world.py
hi.py:
# coding:utf-8
word1  = "hi"
world.py
# coding:utf-8
word2  = "python"
未完待续。。。

















Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐