oeasy教您玩转python - 004 - # 调试程序
调试程序 🥊
回忆上次内容
py
的程序都是写在明面上的所有需要执行的事情都明着写到了
py
文件中用
python3
解释py
文件进行执行可以下载人家写好的
py
文件下载的
py
文件可以直接读懂编写程序的人怎么挣钱呢?
开源
Python 程序确实是直接就能看到源代码的
不能加密既是缺点也是优点
缺点:
无法保密
谁都能看见和改写
传统的软件卖的是序列号
思路是以前许可证的思路
由一个核心节点进行授权
其他用户得到某些许可
甚至是持证抢劫的许可

现代的许可证 license 主要都是赋予用户更多权利
比如 GPL 许可证
GPL
GPL 又称为 Copyleft
这是一种英语的调侃
因为 Copyright 的那个 right 有多个含义
用作 copyright 的时候
right 是权利的意思
但它同时还是“右边”的意思
所以和他相反的就是 Copyleft
表示这是和 Copyright 是走另一边的
GPL 授权对被授权者是有要求的,它重点强调:
第一:和大部分开源软件一样,作品放在这里,你可以用,作者不为任何物理损失负责
第二:如果你,基于这个作品衍生了新的作品,那么这个新的“作品”,必须符合 GPL 协议,否则你就失去原作品的授权
第三,符合 GPL 协议的作品,在提供给它的使用者的时候,必须同时提供该作品的 GPL 部分的源代码,不能对使用者做出限定

这听起来很绕
其实本来是想知道开放了源代码程序员是怎么挣钱的?🤔
现状
目前国内市场定制开发软件的需求越来越少
现在更多的是网站和移动应用
把代码捂在自己手里是没有用的
源代码的开放是发展的趋势
开放源代码可以让更多人才参与开发、修改和传播
linux、debian、vim、python 的源代码大家都能看到和参与
这样的个人软件开发者主导的项目依靠人民战争战胜了软件巨头
参与的人越多
知名度越高
项目越活越
越有可能留得下来
让更多的人知道和参与
个人也因为参与的项目而更知名
不但软件
硬件、游戏、甚至虚拟角色歌姬等等方面
开源项目也越来越多

不过时代的洪流是从最早的水滴开始的
最早的python是由Guido开发的
当时 Guido 如何面对如何的抉择呢?

时代
最早 Guido 确实曾经在 CWI 工作
CWI是荷兰的数学与计算机科学国家研究所

他希望有一种语言能够像C语言那样
全面调用计算机的功能接口
又能像shell那样,轻松的编程
荷兰的CWI 数学和计算机国家研究所开发了一种ABC语言
当时范罗苏姆在CWI工作,并参与到ABC语言的开发
他将自己所知的一切语言设计知识都倾注在这个项目上
尽管已经具备了良好的可读性和易用性
但ABC语言最终还是没有流行起来。
确实是在那里出现的 ABC 给 后来的 python 很大启发
Guido 后来去了 cnri
荷兰的国家研究中心

研究项目的经费确实是 cnri 出的
95 年当时还没有兴起开源运动
发展
当时的许可证是收费的
guido 想把他做成开源的
但是没有立场
毕竟 cnri 花了钱
还有些是他在 cwi 的时候编写的程序 改的 bug

从python的所有者上面可以其实可以看到Guido的工作轨迹
虽然当时还没有开源这些概念和词汇
Guido 的考量
在 python 的 license 里面提到了 cwi 和 cnri

当时 python 的主要成员开始讨论
python 应该继续免费开源还是商业
Guido 认为如果商业化
python 的用户就会离开
最终选择开源的语言和项目
贡献者和社区就是在这基础上发展起来的
但商业是世界运行的底层逻辑
强大的商业资本方会有律师、媒体
python 在这商业的世界里举步维艰
这曾让 Guido 很苦恼
转机
开源运动的期末著作给了他启发
他开始选择 gpl 协议
后来互联网兴起
其中一个网站 BeOpen.com 基于开源技术制作
BeOpen 看到 Guido 的困惑
就想给他一份呢薪水
工作就是完善 python
这是很好的机会
Guido 带着 3 个 CNRI 的同事一起去了
这时候 CNRI 的管理层慌了
他们觉得 Guido 疯了
那是个创业公司
找他谈话
去了就别想再回来
但是不可阻止了
人走了 CNRI 的项目自然也就黄了
不过去 beopen 的 2000 年
正好是互联网泡沫兴起的时候
beopen 想做的是开源门户
泡沫破裂之后又怎么办呢?
后来
他从 beopen.com 之后
Guido 很担心 python 源代码的所有权问题
后来 Guido 去了 soap
在那里他咨询了律师
并建立了 python 基金会
明确了 python 的协议和所属问题
开源运动已经发展起来了
他先加入 google
后来在 150 人的时候加入 dropbox
2020年 去了微软
这就是Guido和python的历史
我们用 python 为 Guido 写一个简历吧
继续编辑 py 文件
#用vi打开并编辑guido.pyvi guido.py
上次输出了两行内容
这次我们复制成 6 行
gg将光标移动回到最开头
yG从当前位置(最开头)复制到结尾
2P粘贴 2 次
i重新切换到插入模式为输出添加年份标号
print("1982------Guido in cwi")
print("1995------Guido in cnri")
print("2000------Guido in beopen")
print("2005------Guido in google")
print("2012------Guido in dropbox")
print("2020------Guido in microsoft")
完成之后<kbd>esc</kbd> 切换到正常模式
:w|!python3 %
保存并用 python 解释当前程序可以看到输出了标了号的 6 行
这 6 行的顺序就是按照我们标号的顺序来的
顺序执行
这个过程叫做顺序执行
按照步骤,有先后次序的
按照时间顺序

顺序播放
就像我们听语音是挨排听的

顺序播放是按照列表顺序播放的
音符顺序
演奏音符也是一个个按照顺序演奏,才是这首歌曲
调换一下次序,就乱了,不是这个歌了
不过其实也是一种思路。。。🤪

按部就班

我们的生活也是按照线性的时间线顺序完成的

学习
学习也一样
要按照时间的次第
一步一步来
啥都一样,别着急!
欲速则不达
那他是怎么解释执行的呢?🤔
尝试调试
那 python 程序到底是怎么一步步解释执行的呢?🤔
我们可以一步一步运行来调试
使用
pdb
来进行调试pdb
的意思是p
ython'sd
eb
ugger🤖
python3 -m pdb guido.py或者使用pdb3

由于程序不知道哪里出的问题
所以一步步来执行
一行行执行的目的是去除
bug
,也就是debug
可是为什么把程序错误叫做
bug
🪰 呢?
第一个错误 bug

历史上第一个程序错误是因为电脑里面飞进来一只虫子
bug
🪰所以后来管调试程序错误叫做
debug
这个
bug
🪰 是谁找出来的呢?
计算之母
找到
bug
的第一个调试员或者叫程序员是一位女性和现在程序员大多是男性不同
因为当时编程都得检查线路
跟编织很像
很容易变得一团乱麻
需要很细心、有条理的人👩🏼🦱

Grace Murray Hopper
故障
当时格蕾丝和她的同事们正艰难地搞清楚
他们正在使用的马克 II 电脑出现了什么故障
最后,他们发现一只活蛾被困在控制电路的一个电子开关中

不要害怕
bug
,因为bug
是程序员存在的基础如果没有了
bug
,那也就不需要程序员了程序员本身就是
bug
一般的存在 🪰让我们来 debug!🐥
进行调试

命令细节
运行之后
h
查询help
帮助l
进行list
列表n
进行next
向下执行q
执行quit
退出这得动手试一试
完成调试
一路
next
下去程序执行完毕了
整个程序就算执行完成了
python 解释器 就是这么一步步地解释执行的

总结
py
的程序是按照顺序一行行挨排按顺序解释执行的
我们可以
python3 -m pdb hello.py
来对程序调试调试的目的是去除
bug
别害怕
bug
bug
会有提示我们也就知道如何调试
debug
python3
这个解释器到底是怎么执行的呢?🤔我们下次再说!*