解释器环境与选项
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解释器中直接运行时即能进行自我测试。