show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次学习了一个函数exec
- 意思是执行
- 执行的是python的代码字符串
- 可以用三引号来执行很多句
- 很长的程序就是很长的字符串
- 字符串可以一把执行
- 具体也是这么一句句执行的
- exec("a = 1") 就
- 声明了 变量a
- 并且 给a赋值为1
- 变量 是编程的基础
- py程序是一行行编写的
- python语言 也是一点点进化的
- 作为 Guido业余爱好的python
- 是如何走向世界
- 成为编程语言第一的呢?🤔
- 由于计算机性能的提高
- 软件的世界也开始随之改变
- 硬件足以满足许多个人电脑的需要
- 硬件厂商甚至渴望高需求软件的出现
- 比如各种图形用户界面
- 这些图形界面对于算力的需求
- 又反过来带动硬件的更新换代
- 正反馈形成
- C++和python相继流行
- C++和python提供了
- 面向对象的编程范式
- 以及丰富的对象库
- 在牺牲了一定的性能的代价下
- C++和python大大提高了程序的产量
- 语言的易用性被提到一个新的高度
- C++和python提供了
- 我们还记得
- ABC失败的一个重要原因是硬件的性能限制
- 从这方面说
- Python要比ABC幸运许多。
- 硬件性能不再是瓶颈
- Python又容易使用
- 所以许多人开始转向Python
- python的进化
- Guido维护了一个maillist,Python用户就通过邮件进行交流
- Python用户来自许多领域,有不同的背景,对Python也有不同的需求
- Python相当的开放,又容易拓展,所以当用户不满足于现有功能,很容易对Python进行拓展或改造
- 随后,这些用户将改动发给Guido,并由Guido决定是否将新的特征加入到Python或者标准库中
- 如果代码能被纳入Python自身或者标准库,这将极大的荣誉
- Python自身也因此变得更好
- 这里面就包括大名鼎鼎的nasa
- 1994年nasa把python作为主要的开发语言
- 某种程度上 为python背书
- 获得某种权威感
- python就这样上天了
- 真实意义上的上天了
- 当时使用的是mailinglist进行开发
- 大家用邮件列表
- 这样的开发方式一直延续到1.6
- 随着网络的发展
- 各种网站层出不穷
- 有个神奇的地方出现
- 开源网站sourceforge
- python从这个时候
- 基于sf进行开发
- 发布
- 一种新的软件开发模式开始流行
- 开源 (open source)
- 程序员利用业余时间进行软件开发,并开放源代码
- 1991年,Linus在comp.os.minix新闻组上发布了Linux内核源代码,吸引大批hacker的加入
- Linux和GNU相互合作,最终构成了一个充满活力的开源平台
- python也主动开源了
- 版本平滑过渡到2.0
- 这是当时2.0时期的python语言代码的样子
-
和今天完全不同
-
16 October 2000 发布2.0
- 不但核心成员可以进行开发
- 世界上各地各种语言的开发者都可以进行开发和改造了
-
internet发挥了越来越大的作用
-
这种作用就像本章的标题一样
-
是指数级别的
- 随着网站数量越来越多
- 时代慢慢产生了变化
- 1990年代还是个人电脑的时代
- windows和Intel挟PC以令天下,盛极一时
- 尽管Internet为主体的信息革命尚未到来
- 但许多程序员以及资深计算机用户已经在频繁使用Internet进行交流 (包括email和newsgroup)
- Internet让信息交流成本大大下降
- python是和网站一起长起来的
- 很多网站后台的脚本语言都选用python
- 这引发了正反馈
- 相关的岗位也就越来越多
- 学习的人数也越来越多
- 都是随着互联网指数级别的增长
- google搜索部门甚至主动找到Guido
- 他们认为有职位适合Guido
- 因为他有一定的python经验
- 但他们不知道Guido是制作python的人
- 并要求他提交简历
- 各个商业公司里面的牛人也开始为python添砖加瓦
- 比如这个浮点运算
- 乘方运算是如何是如何实现的呢?
- 可以看到一条指令BINARY_POWER
- 在cpython源码中查找
- 源码中没有
- 但是有commit就是提交记录
- 我们可以看到这个东西1996年从无到有
- 然后不断进化
- 世界各地的程序员都在为python添砖加瓦
- 搜索包含power的c语言代码
- cpython/Objects/abstract.c
- 调用了三元运算ternary_op
- 先通过转化同一类型
- 如果转化不了呢
- 这个的源代码在哪?
- 就在abstract.c中
- ternary_op函数里
- 把运算符和操作数都抽象了
- 具体的实现呢?
- 整型的乘方是long_pow
- 浮点型的乘方是float_pow
- 如果字符串和整型运算会如何呢?
- 这都谁写的呢?
- 好多的大牛
- 这里也有Tim的代码
- 还记得吗?
- 让int 和 float能相加的人
- 这里面包括 python 之禅的作者 Tim Peters
- 最初为 python 做出的进化
-
Beautiful is better than ugly. (优美比丑陋好)
-
Explicit is better than implicit.(清晰比晦涩好)
-
Simple is better than complex.(简单比复杂好)
-
Complex is better than complicated.(复杂比错综复杂好)
-
Flat is better than nested.(扁平比嵌套好)
-
Sparse is better than dense.(稀疏比密集好)
-
Readability counts.(可读性很重要)
-
Special cases aren't special enough to break the rules.(特殊情况也不应该违反这些规则)
-
Although practicality beats purity.(但现实往往并不那么完美)
-
Errors should never pass silently.(异常不应该被静默处理)
-
Unless explicitly silenced.(除非你希望如此)
-
In the face of ambiguity, refuse the temptation to guess.(遇到模棱两可的地方,不要胡乱猜测)
-
There should be one-- and preferably only one --obvious way to do it.(肯定有一种通常也是唯一一种最佳的解决方案)
-
Although that way may not be obvious at first unless you're Dutch.(虽然这种方案并不是显而易见的,因为你不是那个荷兰人[这里指的是Python之父Guido])
-
Now is better than never.(现在开始做比不做好)
-
Although never is often better than right now.(不做比盲目去做好)
-
If the implementation is hard to explain, it's a bad idea.(如果一个实现方案难于理解,它就不是一个好的方案)
-
If the implementation is easy to explain, it may be a good idea.(如果一个实现方案易于理解,它很有可能是一个好的方案)
-
Namespaces are one honking great idea -- let's do more of those!(命名空间非常有用,我们应当多加利用)
-
有了这些大德的帮助
- python也在正确的时间上实现了好机遇
- 开源的python 赶上了好时代
- 并且有非常强大的运算能力
- 还有很多人帮助他
- 得道多助
- 失道寡助
- 这就是python的累积
- 就像加法累积成乘法
- 乘法累积成乘方一样
- 积小胜为大胜
- 积跬步以至千里
- 积量变而质变
- python
- 终日都在向前进步
- 乘方的逆运算是什么呢?
- 开方
- 开方怎么做的呢?🤪
- 下次再说 👋