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] ##一般来说这样就足够了
  • 相关阅读:
    10 个深恶痛绝的 Java 异常。。
    为什么公司宁愿 25K 重新招人,也不给你加到 20K?原因太现实……
    推荐一款代码神器,代码量至少省一半!
    Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝。。
    hdu 3853 LOOPS(概率 dp 期望)
    hdu 5245 Joyful(期望的计算,好题)
    hdu 4336 Card Collector(期望 dp 状态压缩)
    hdu 4405 Aeroplane chess(概率+dp)
    hdu 5036 Explosion(概率期望+bitset)
    hdu 5033 Building (单调栈 或 暴力枚举 )
  • 原文地址:https://www.cnblogs.com/DjangoBlog/p/3534079.html
Copyright © 2011-2022 走看看