玩转python如此简单(oeasy教您玩转python-4)
调试程序 回忆上次内容
- py 的程序都是写在明面上的
- 所有需要执行的事情都明着写到了 py 文件中
- 用 Python3 解释 py 文件进行执行
- 可以下载人家写好的 py 文件
- 下载的 py 文件可以直接读懂
- 编写程序的人怎么挣钱呢?
- python 程序确实是直接就能看到源代码的
- 不能加密既是缺点也是优点
- 缺点: 无法保密 谁都能看见和改写 传统的软件卖的是序列号 思路是以前许可证的思路
- 由一个核心节点进行授权
- 其他用户得到某些许可 甚至是持证抢劫的许可
- 现代的许可证 license 主要都是赋予用户更多权利
- 比如 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的工作轨迹
- 虽然当时还没有开源这些概念和词汇
- 在 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 写一个简历吧
#用vi打开并编辑guido.py
vi 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")
- :w|!python3 % 保存并用 python 解释当前程序
- 可以看到输出了标了号的 6 行
- 这 6 行的顺序就是按照我们标号的顺序来的
- 这个过程叫做顺序执行
- 按照步骤,有先后次序的
- 按照时间顺序
顺序播放
- 就像我们听语音是挨排听的
- 顺序播放是按照列表顺序播放的
- 演奏音符也是一个个按照顺序演奏,才是这首歌曲
- 调换一下次序,就乱了,不是这个歌了
- 不过其实也是一种思路。。。
按部就班
- 我们的生活也是按照线性的时间线顺序完成的
学习
- 学习也一样
- 要按照时间的次第
- 一步一步来
- 啥都一样,别着急!
- 欲速则不达
- 那他是怎么解释执行的呢?
- 那 python 程序到底是怎么一步步解释执行的呢?
- 我们可以一步一步运行来调试
- 使用pdb来进行调试 pdb的意思是python's debugger
python3 -m pdb guido.py
#或者使用
pdb3
- 由于程序不知道哪里出的问题
- 所以一步步来执行
- 一行行执行的目的是去除bug,也就是debug
- 可是为什么把程序错误叫做 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 这个解释器到底是怎么执行的呢?
- 我们下次再说!
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com