简介
本文提供python调试和发布流程的简介。
- Python3变化:统一str和unicode,真除法,弃用某些魔法方法。
- 断点调试:pdb模块用于交互式调试。
- 依赖管理:如pycurl安装
python3-devel
。 - 发布流程:编译、删除源码、打包。
- 内置魔法函数:
__iter__
、__call__
等。 - 二进制运算:
chr()
和ord()
用于Unicode字符和整数间转换。 - 字面量:python中各个类型的二进制和默认值表示。
1 对象模型Python3和Python2.x之间的主要区别
Python3的string和unicode区别不复存在,因此unicode被取消 bytes加入进来(与
python2.7的str和unicode行为类似),用于心的创建字节数组的内建方法
py3默认除法变成了true除法,因此div取消
coerce被取消,因为与其他魔法方法有功能重复
cmp 取消,与其他魔法方法功能重复
nonzero被重命名为 bool
2 断点
1, 断点设置后,代码执行到该位置,程序挂起检查程序行为
2, 异常断点,到达断点后要执行的操作
3, 断点属性,达到断点时要执行的操作
挂起策略,用于定义在遇到断点时是否必须挂起应用程序
对其他断点的依赖,
何时必须击中断点
4 消息记录
断点命中消息,命中断点时,控制输出一条日志消息
堆栈跟踪 断点的堆栈跟踪将命中打印到控制台
5 断点工具
pdb 交互式代码调试,功能包括
设置断点,单步调试,进入函数调试,查看当前代码,查看栈片段,动态改变变量的值
进入pdb交互界面
命令
break 或b设置断点
continue 或c 继续执行
list或l 查看当前代码段
step或s 进入函数
return或r 执行代码直到当前函数返回
exit或q 中止并退出
next或n 执行下一行
pp 打印变量的值
3 pycurl的依赖问题
pycurl 需要contos 7安装python3-devel
具体过程pycurl-centos7
4 py编译 发布流程
1,编译生成pyc文件,建议增加-O优选项
python3 -O -m compileall -b .
2, 删除py文件
find . -name "*.py"|xargs rm -rf
3, 删除pycache目录
find . -name "__pycache__" |xargs rm -rf
4, 打包 tar包
cd .. tar -cjvf xxx.1.1.00.tar.bz2 xxx
5, 或git push到仓库
git push origin master:master
5 常用内置 魔法函数
iter # 在类中实现,可以直接对类进行迭代 类似于如下形式
obj.next 或 next(obj)
call # 在对象直接 进行调用
obj()
、slate 为对象类 提供限制,只能赋予固定的属性名称
__qualname__ # 查看类和当前函数名
>>> D.f.__qualname__
>>> D.f#返回类和函数
通过类字典返回函数,不会 返回函数名
>>> D.__dict__['f']
<function D.f at 0x000001F6C6224670
通过类实例的点运算 查看函数 将直接返回函数
>>> d = D()
>>> d.f
<bound method D.f of <__main__.D object at 0x000001F6C5F42070>>
查看实例的函数对象
>>> d.f.__func__
<function D.f at 0x000001F6C6224670>
>>> d.f.__self__
<__main__.D object at 0x000001F6C5F42070>
6 内置函数 二进制运算
chr
返回整数 i 的字符串格式,如 chr(97) 返回字符 'a' 是 ord的逆运算
chr('8364') (欧元符号)返回 €
ord
返回代表单个Unicode字符的 码点的整数,例如 ord('a')返回整数 97
ord('€') (欧元符号)返回 8364
7 字面量
字面量是以变量或常量给出的原始数据。在Python中,有多种类型的字面量,如下所示:
数字字面量
数字字面量是不可变的(不可更改)。数字字面量可以属于3种不同的数值类型:Integer,Float 和 Complex。
a = 0b1010 #二进制字面量
b = 100 #十进制字面量Float 字面量
float_1 = 10.5
float_2 = 1.5e2复数 Complex 字面量
x = 3.14j
print(a, b )
print(float_1 )
print(x, x.imag, x.real)
运行该程序时,输出为:
10 100
10.5 150.0
3.14j 3.14 0.0
我们将整数字面量分配给不同的变量。在这里,a是二进制字面量,b是十进制字面量。
当我们打印变量时,所有字面量 都将转换为 十进制值。
10.5 和 1.5e2 是浮点字面量。1.5e2 用指数表示,等于 1.5 * 102。
我们为变量x分配了一个复数字面量 3.14j 。然后,我们使用虚数字面量(x.imag) 和 实数字面量(x.real)来创建复数的虚部和实部。
布尔字面量
a = True + 4
b = False + 10print(a,b)
5, 10
布尔字面量 True 和 False。在Python中,True 表示值为1,False 表示值为0.