zoukankan      html  css  js  c++  java
  • python参考手册--第8章

    1.模块和import

    (1)首次import module会做以下3件事:

    a)创建新的命名空间,用作在该源文件中定义的所有对象的容器。在模块中定义的函数和方法在使用global语句时将访问该命名空间。

    b)在新创建的命名空间中执行模块中包含的代码。

    c)在调用函数中创建名称来引用模块命名空间,这个名称和模块的名称相匹配。

    (2)用于引用模块的名称可以使用as限定符进行更改:

    import spam as sp

    sp.foo()

    别名只在使用了import spam as sp的调用文件中起作用,其他源文件不起作用

    使用场景:模块作为python中的第一类对象,可以分配给变量,作为参数传递

    if format == 'xml':

      import xmlReader as reader

    elif format == 'csv':

      import csvReader as reader

    实现了与抽象工厂模式相同功能!

    (3)sys.modules:查看当前加载的所有模块

    (4)import模块可以在程序中任意位置,但只import和加载一次。

    (5)使用里面的函数及类时要在前面加module的名称(即命名空间):

    spam.foo()

    2.模块和from

    (1)from语句将其他模块module1中的具体定义加载到当前模块module2的命名空间,不会为module1创建新的命名空间。使用的时候不会加module的名字(即命名空间),因为他就在当前的命名空间里

    from spam import foo

    foo()

    引入多个定义:

    from spam import (doo,foo,moo)

    from spam import *

    3.python源文件以主程序执行

    (1)__name__

    python spam.py执行该源文件。每个模块定义了一个包含模块名称的变量__name__,解释器的顶级模块名为__main__。

    通常通过判断__name__是否为__main__来引导进入单元测试

    def main():
    unittest.main()

    if __name__ == '__main__':
    main()

    4.模块搜索路径

    (1)sys.path

    解释器在sys.path路径中搜索字典,第一个为'',表示当前正在使用的字典。加载模块时按顺序依次搜索。

    >>> sys.path
    ['', 'C:\Python27\Lib\idlelib', 'C:\Python27\lib\site-packages\python_memcached-1.53-py2.7.egg', 'C:\Python27\lib\site-packages\chardet-2.2.1-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']

    可以把.py文件放入.zip或者.egg文件中,然后添加进sys.path

    import sys

    sys.path.append("mymodules.zip")

    (2)模块加载

    import可加载的模块分为4类

    a)*.py文件

    b)已编译成共享库或DLL的C、C++扩展

    c)包含一组模块的包

    d)使用C编写并连接到python解释器的内置模块

    首次导入模块时,它会被编译为字节码并作为.pyc文件写回磁盘(-O选项,删除了行号,断言,调试信息)。在后续的导入中,解释器将加载这段预编译的字节码,除非.py文件的修改日期要更新一些(会重新生成.pyc)。.pyc文件与解释器的-O选项结合使用。 如果选项是-OO,则生成.pyo文件,除了删除行号,断言,调试信息,还会删除文档字符。

    只有import语句才会生成.pyc或者.pyo。而通过命令行启动python xxx.py 时,不会生成pyc,pyo文件。

    pyc,pyo文件与具体的python版本相关,也可以通过解释器中用-B来禁止生成。

    5.包

    (1)__init__.py

     包通常用于解决模块命名空间冲突问题,包下面有多个.py文件。

    包的创建:在目录中创建__init__.py即创建了包

    import包下面的模块: import mypackage.mymodule

    第一次导入包都会执行__init__.py,可以在__init__.py中定义__all__ = ['module1','module2','module3']来指出该package包含的modules。从而可以通过from mypackage import *导入该包下面的modules。

    (2)相对导入

    from ..subpackage2 import module3

    相对导入只能通过from import导入。

    6.包的分发和安装

    (1)setup.py

    目录结构如下:

    /spam

      readme.txt

      Documentation.txt

      libspam.py

      /spampkg

        __init__.py

        foo.py

        bar.py

      runspam.py

     在顶级目录创建setup.py文件,

    #setup.py

    from distutils.core import setup

    setup(name='spam',version='1.0',py_modules=['libspam'],packages=['spampkg'],scripts=['runspam.py'])

    执行python setup.py sdist将会在spam/dist下创建一个归档文件spam-1.0.tar.gz或者spam-1.0.zip

    安装:

    unzip spam-1.0.zip

    cd spam

    python setup.py install

    此外:

    python setup.py bdist将创建一个二进制分发程序

    python setup.py bdist_wininst用于在windows下创建一个.exe文件

    7.安装第三方库

    第三方库资源:http://pypi.python.org下载压缩文件,然后解压之后,运行python setup.py install,默认安装在site-packages目录下,

    也可以指定到其他目录:python setup.py install --prefix=/home/www/pypackages,但要将该目录加入到sys.path,否则找不到。

    8.打印异常信息

    except:
    print sys.exc_info()[0],sys.exc_info()[1] ##一般来说这样就足够了
  • 相关阅读:
    [HDU 2089]不要62
    [WC 2011]Xor
    [BJOI 2011]元素
    [NOIp 2014]解方程
    [UVa 1326]Jurassic Remains
    [BZOJ 2152]聪聪可可
    [IOI 2011]Race
    [测试题]打地鼠
    [POJ 2828]Buy Tickets
    [测试题]gene
  • 原文地址:https://www.cnblogs.com/DjangoBlog/p/3534079.html
Copyright © 2011-2022 走看看