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

简介:

解释器环境与选项

  python解释器启动:

1
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__可以显示这些文档字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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:

1
2
3
4
5
6
7
8
9
10
11
[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模块进行测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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 )

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

  创建可自测试的模块:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[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解释器中直接运行时即能进行自我测试。










本文转自 忘情OK  51CTO博客,原文链接:http://blog.51cto.com/itchentao/1890283,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
65 4
|
28天前
|
Python
Python Internet 模块
Python Internet 模块。
121 74
|
2月前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
125 63
|
2月前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
7天前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
20 3
|
2月前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
2月前
|
Python
Python的模块和包
总之,模块和包是 Python 编程中非常重要的概念,掌握它们可以帮助我们更好地组织和管理代码,提高开发效率和代码质量
51 5
|
2月前
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
2月前
|
JavaScript 前端开发 Python
python中的OS模块的基本使用
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。博客分享前端技术及全栈开发经验,持续更新中,期待您的关注和支持!🎉🎉🎉
45 0
|
2月前
|
JavaScript 前端开发 Python
python中的platform模块的基本使用
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。博客分享前端技术,助你成长。关注我,持续更新中!🎉🎉🎉
31 0