python之基础篇(十)——执行环境与

发布时间:2019-09-19 08:04:20编辑:auto阅读(1680)

    防伪码:忘情公子著


    解释器环境与选项

      python解释器启动:

    python [options] [-c cmd | filename | - ] [args]
    选项
    描述
    -3
    启用将从python3中删除或更改某些功能的警告
    -B
    阻止在导入时创建.pyc或.pyo文件
    -E
    忽略环境变量
    -h
    打印所有可用命令行选项的列表
    -i
    在程序执行后进入交互模式
    -m module
    以脚本的形式运行库模块module
    -O
    优化模式
    -OO
    优化模式,在创建.pyo文件时删除文档字符串
    -Q arg
    指定python2中除法运算符的行为,值为-Qold(默认值)、-Qnew、-Qwarn或-Qwarnall之一
    -s
    阻止将用户站点目录添加到sys.path
    -S
    阻止包含site初始化模块
    -t
    报告关于不一致的标签使用警告
    -tt
    由于不一致的标签使用而导致TabError异常
    -u
    未缓冲的二进制stdout和stdin
    -U
    Unicode字面量。所有字符串字面量都以Unicode形式处理(仅在python2中使用)
    -v
    详细模式。跟踪导入语句
    -V
    打印版本号并退出
    -x
    跳过源程序的第一行
    -c cmd
    以字符串形式执行cmd

      python解释器环境变量:

    环境变量
    描述
    PYTHONPATH
    以冒号分隔的模块搜索路径
    PYTHONSTARTUP
    在以交互方式启动时执行的文件
    PYTHONHOME
    python安装的位置
    PYTHONINSPECT
    相当于-i选项
    PYTHONUNBUFFERED
    相当于-u选项
    PYTHONIOENCODING
    针对stdin、stdout和stderr的编码和错误处理。这是一个encoding[:errors]形式的字符串,如utf-8或utf-8:ignore
    PYTHONDONIWRITEBYTECODE
    相当于-B选项
    PYTHONOPTIMIZE
    相当于-O选项
    PYTHONNOUSERSITE
    相当于-s选项
    PYTHONVERBOSE
    相当于-v选项
    PYTHONUSERBASE
    每个用户站点包的根目录
    PYTHONCASEOK
    指示为导入所使用的模块名称使用不区分大小写的匹配方式


    python代码的测试、调试与探查

      基于文档字符串来进行测试。

      如果函数、类或模块的第一行是一个字符串,这个字符串就称为文档字符串(docstrings)。

      内置函数help()或对象的默认方法__doc__可以显示这些文档字符串。

    In [1]: def Sum(num1,num2):
       ...:     '''The sumary of num1 and num2.
       ...:     >>> Sum(2,5)
       ...:     7
       ...:     >>> Sum(12,77)
       ...:     89
       ...:     '''
       ...:     return num1 + num2
       ...:
    
    In [2]: help(Sum)
    
    In [3]: Sum.__doc__
    Out[3]: 'The sumary of num1 and num2.\n    >>> Sum(2,5)\n    7\n    >>> Sum(12,77)\n    89\n    '

      doctest模块:

        doctest模块允许在文档字符串内嵌入注释以显示各种语句的期望行为,尤其是函数和方法的结果

          此处的文档字符串看起来如同一个交互式shell会话;

          可用于测试文档是否与程序主体保持同步,或基于文档对程序本身做测试

        自定义模块mymod:

    [root@localhost test]# pwd
    /root/test
    [root@localhost test]# cat mymod.py
    #!/usr/bin/python
    
    def add(num1,num2):
        '''
        >>> add(12,43)
        55
        '''
        return num1 + num2

        在交互式模式下使用doctest模块进行测试:

    In [4]: import sys
    
    In [5]: sys.path.append('/root/test')    #将/root/test加入模块搜索路径
    
    In [6]: import mymod
    
    In [7]: import doctest
    
    In [8]: doctest.testmod(mymod)
    Out[8]: TestResults(failed=0, attempted=1)
    
    In [9]: doctest.testmod(mymod,verbose=True)
    Trying:
        add(12,43)
    Expecting:
        55
    ok
    1 items had no tests:
        mymod
    1 items passed all tests:
       1 tests in mymod.add
    1 tests in 2 items.
    1 passed and 0 failed.
    Test passed.
    Out[9]: TestResults(failed=0, attempted=1)

        如果文档字符串中的结果与预期结果不一致,测试会显示出错的结果信息。

      创建可自测试的模块:

        在模块的尾部添加如下代码即可

    [root@localhost test]# cat mymod.py
    #!/usr/bin/python
    
    def add(num1,num2):
        '''
        >>> add(12,43)
        55
        '''
        return num1 + num2
    
    if __name__ == '__main__':
        import doctest
        print doctest.testmod(verbose=True)
    [root@localhost test]# python mymod.py
    Trying:
        add(12,43)
    Expecting:
        55
    ok
    1 items had no tests:
        __main__
    1 items passed all tests:
       1 tests in __main__.add
    1 tests in 2 items.
    1 passed and 0 failed.
    Test passed.
    TestResults(failed=0, attempted=1)

       此类模块在python解释器中直接运行时即能进行自我测试。

关键字