《Python基础教程(第二版)》学习笔记 -> 第十章 充电时刻 之 模块

模块是程序


  任何Python程序都可以作为模块导入。

   先在c盘目录下创建一个py文件夹,然后新建一个hello.py文件,代码如下:

   print "Hello Python!"

   下面将运行这个模块,代码如下:

 

>>> import sys

>>> sys.path.append('c:/py')

>>> import hello

Hello Python!

  这里做的只是告诉解释器,除了从默认的目录中寻找之外,还需要从目录c:/py中寻找模块。

 

模块用于定义


  1.  在模块中定义函数
    新建一个包含函数的简单模块:
    # hello2.py
    
    def hello():
    
        print 'hello Python'

    然后倒入执行模块:

    >>> import sys
    
    >>> sys.path.append('c:/py')
    
    >>> import hello2
    
    >>> hello2.hello()
    
    hello Python

    代码放在模块中,原因是:代码重用(code reuse)

  2. 在模块中增加测试代码
    def hello():
    
        print 'Hello Python!'
    
    
    
    def test():
    
        hello()
    
    
    
    if __name__ == '__main__':test()

    如果将它作为程序运行,hello函数会被执行。而作为模块导入时,它的行为就会像普通模块一样。

  3. 让你的模块可用
    ① 将模块放置在正确的位置
      将你的模块放置在正确的位置,然后告诉Python解释器从哪里查找模块
    >>> import sys
    
    >>> import pprint
    
    >>> pprint.pprint(sys.path)
    
    ['',
    
     'C:\\Python27\\Lib\\idlelib',
    
     'C:\\Python27\\lib\\site-packages\\pip-1.5.4-py2.7.egg',
    
     'C:\\Windows\\system32\\python27.zip',
    
     'C:\\Python27\\DLLs',
    
     'C:\\Python27\\lib',
    
     'C:\\Python27\\lib\\plat-win',
    
     'C:\\Python27\\lib\\lib-tk',
    
     'C:\\Python27',
    
     'C:\\Python27\\lib\\site-packages']

    (如果你的数据结构过大,不能在一行打印完,可以使用pprint模块中的 pprint函数代替普通的print语句)

    本地 C:\Python27\Lib\site-packages目录是模块存储的最佳路径,写好的模块放在此路径可以直接引用

    ② 告诉编译器去哪里找
    “将模块放置在正确的位置”这个解决方案,对于下面几种情况可能不使用:
    a. 不指望将自己的模块填满Python解释器的目录;
    b. 没有在Python解释器目录中存储文件的权限;
    c. 想将模块放在其他的地方

    ③ 命名模块
    模块代码文件后缀加上.py后缀名即可


  4. 包,是模块所在的目录

模块探究


  1.  模块中有什么
    ① 使用dir
        查看模块包含的内容可以使用dir函数,它会将对象(以及模块的所有函数,类、变量等)的所有特性都列出。
    >>> import copy
    
    >>> dir(copy)
    
    ['Error', 'PyStringMap', '_EmptyClass', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_copy_dispatch', '_copy_immutable', '_copy_inst', '_copy_with_constructor', '_copy_with_copy_method', '_deepcopy_atomic', '_deepcopy_dict', '_deepcopy_dispatch', '_deepcopy_inst', '_deepcopy_list', '_deepcopy_method', '_deepcopy_tuple', '_keep_alive', '_reconstruct', '_test', 'copy', 'deepcopy', 'dispatch_table', 'error', 'name', 't', 'weakref']

    ②__all__ 变量

       在编写模块的时候,__all__会将模块中不要的变量、函数和类过滤除去,使用import *语句会默认将会输出模块所有不以下划线开头的全局名称
    >>> from copy import *
    
    >>> dir(copy)
    
    ['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']

     

  2. 用help 获取帮助
    建议,有不懂的,在Python的直接按F1,帮助文档就会出来,可以检索关键字

  3. 文档
    >>> print copy.__doc__
    
    Shallow copy operation on arbitrary Python objects.
    
    
    
        See the module's __doc__ string for more info.

    模块的信息来自于文档,上例就是一个代码示例

 

你可能感兴趣的:(python)