zoukankan      html  css  js  c++  java
  • pyhon 模块与库

    引用“http://www.iplaypython.com/module/

    引用“http://codingnow.cn/language/265.html

    Python模块是什么?

    玩蛇网:一个完整大型的python程序是由模块和包的形式组织起来的,可见模块在python中的重要性。模块是一种组织型式,它许多有关联(关系)的代码组织放到单独的独立文件中。简单的说,可以把模块理解为一个包含了许多强大功能(方法)的包。在python标准库中就包含许多模块,有很多模块内的方法都会被经常使用到。

    在python中一个文件可以被看成一个独立模块,而包对应着文件夹,模块把python代码分成一些有组织的代码段,通过导入的方式实现代码重用。

    在《笨方法学Python》中,库被称为模组(modules)

    Python模块有什么作用?

    1、模块内有许多函数方法,利用这些方法可以更简单的完成许多工作。
    2、模块可以在文件中永久保存代码。在python交互式解释器中操作输入的代码,在退出python时是不会被保存的,而模块文件中的代码是永久存在的。
    3、从实用性方面来说,模块可以跨系统平台使用,只需要Copy代码就可以。比如说,有一个全局对像,会被许多文件使用,这时为了方便把它写入一个模块中,再被调用是最好的方法。

    1.1 模块搜索路径

    导入模块时,是按照sys.path变量的值搜索模块,sys.path的值是包含每一个独立路径的列表,包含当前目录、python安装目录、PYTHONPATH环境变量,搜索顺序按照路径在列表中的顺序(一般当前目录优先级最高)。

    [‘/home/zhoujh/study_workspace/studynotes/python/python_base’, ‘/usr/local/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg’, ‘/usr/local/lib/python2.6/site-packages/redis-2.2.1-py2.6.egg’, ‘/usr/local/lib/python2.6/site-packages/Flask-0.8-py2.6.egg’, ‘/usr/local/lib/python2.6/site-packages/Jinja2-2.6-py2.6.egg’, ‘/usr/local/lib/python2.6/site-packages/Werkzeug-0.8.3-py2.6.egg’, ‘/usr/local/lib/python2.6/site-packages/tornado-2.2.1-py2.6.egg’, ‘/usr/local/lib/python2.6/site-packages/MySQL_python-1.2.3-py2.6-linux-x86_64.egg’, ‘/usr/local/lib/python2.6/site-packages/PIL-1.1.7-py2.6-linux-x86_64.egg’, ‘/usr/local/lib/python2.6/site-packages/SQLAlchemy-0.7.8-py2.6-linux-x86_64.egg’, ‘/home/zhoujh/python_workspace/python_app’, ‘/usr/local/lib/python26.zip’, ‘/usr/local/lib/python2.6’, ‘/usr/local/lib/python2.6/plat-linux2’, ‘/usr/local/lib/python2.6/lib-tk’, ‘/usr/local/lib/python2.6/lib-old’, ‘/usr/local/lib/python2.6/lib-dynload’, ‘/usr/local/lib/python2.6/site-packages’]

    1.2 导入模块
    1.2.1 使用import语句导入模块

    有下面两种方式

    1
    2
    3
    import module1
    import module2
    import module3
    1
    import module1,module2,module3

    这两种方式的效果是一样的,但是第一种可读性比第二种好,推荐按照下面的顺序导入模块,并且一般在文件首部导入所有的模块

    • python标准库
    • 第三方模块
    • 应用程序自定义模块

    也可以在函数内部导入模块,这样被导入的模块作用域是局部的

    1.2.2 使用from-import语句导入模块的属性

    单行导入

    1
    from module import name1,name2,name3

    多行导入

    1
    2
    from module import name1,name2,
                       name3

    导入全部属性(由于容易覆盖当前名称空间中现有的名字,所以一般不推荐使用,适合模块中变量名很长并且变量很多的情况)

    1
    from module import *

    如果你不想某个模块的属性被以上方法导入,可以给该属性名称前加一个下划线(_test),如果需要取消隐藏,可以显示的导入该属性(from module import _test)

    1.2.3 扩展的import语句
    使用自定义的名称替换模块的原始名称

    1
    import simplejson as json

    模块被导入时,加载的时候模块顶层代码会被执行,如:设定全局变量、类和函数的声明等,所以应该把代码尽量封装到类和函数中。一个模块无论被导入多少次,只加载一次,可以防止多次导入时代码被多次执行。

    1.2.4 重新导入模块

    1
    reload(module)

    内建函数reload可以重新导入一个已经存在的模块

    2. 包
    包将有联系的模块组织在一起,有效避免模块名称冲突问题,让应用组织结构更加清晰。
    一个普通的python应用程序目录结构:

    app/
    __init__.py
    a/
    __init__.py
    a.py
    b/
    __init__.py
    b.py

    app是最顶层的包,a和b是它的子包,可以这样导入:

    1
    2
    3
    4
    5
    from app.a import a
    from app.b.b import test
     
    a.test()
    test()

    上面代码表示:导入app包的子包a和子包b的属性test,然后分别调用test方法。
    每个目录下都有__init__.py文件,这个是初始化模块,from-import语句导入子包时需要它,可以在里面做一些初始化工作,也可以是空文件。ps:__init__.py定义的属性直接使用 顶层包.子包 的方式导入,如在目录a的__init__.py文件中定义init_db()方法,调用如下:

    1
    2
    3
    from app import a
     
    a.init_db()
    1
     

    3. 指定python文件编码方式
    python默认是使用ASCII编码,可以指定编码方式,如

    1
    2
    #!/usr/bin/env python
    #coding=utf-8

    或者

    1
    2
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-

    4. 解决导入循环问题
    有下面两个模块,a.py和b.py
    a.py

    1
    2
    3
    4
    5
    6
    7
    #!/usr/bin/env python
    #coding=utf-8
     
    import b
     
    if __name__ == '__main':
        print 'hello,I'm a'
    1
    b.py
    1
    2
    3
    4
    5
    6
    7
    #!/usr/bin/env python
    #coding=utf-8
     
    import a
     
    if __name__ == '__main':
        print 'hello,I'm b'

    在这里a尝试导入b,而b也尝试导入a,导入一个先前没有完全导入的模块,会导致导入失败。解决办法:移除一个导入语句,把导入语句放到函数内部,在需要的时候导入。
    b.py

    1
    2
    3
    4
    5
    6
    #!/usr/bin/env python
    #coding=utf-8
     
    if __name__ == '__main':
        import a
        print 'hello,I'm b'

    5. 使用技巧
    创建一个目录python_apps,编辑~/.bashrc,设定环境变量PYTHONPATH的值为该目录的路径。

    1
    export PYTHONPATH=/home/zhoujh/python_apps:$PYTHONPATH

    然后在python_apps目录下做一个软链接至应用的目录,假如要运行的应用路径为:/home/zhoujh/python_workspace/app

    1
    ln -s /home/zhoujh/python_workspace/app ./app

    这样以后添加新的应用,只需在该目录下创建一个链接就行。

  • 相关阅读:
    C语言I博客作业02
    C语言I博客作业06
    C语言I—2019秋作业第一周作业
    C语言I博客作业09
    C语言I博客作业07
    C语言I博客作业08
    利用 jrebel 热部署\远程调试\远程热部署 springboot项目 服务器上的代码
    java 双因素认证(2FA)TOTP demo
    java File读取文件始终不存在的问题分析
    exchange 2010 的两个错误
  • 原文地址:https://www.cnblogs.com/pingandezhufu/p/5056098.html
Copyright © 2011-2022 走看看