Skip to content

Latest commit

 

History

History
267 lines (200 loc) · 8.44 KB

181-556666-python的积累.sy.md

File metadata and controls

267 lines (200 loc) · 8.44 KB
show version enable_checker
step
1.0
true

python的积累

回忆

  • 上次学习了一个函数exec
    • 意思是执行
    • 执行的是python的代码字符串
  • 可以用三引号来执行很多句
    • 很长的程序就是很长的字符串
    • 字符串可以一把执行
    • 具体也是这么一句句执行的
  • exec("a = 1") 就
    • 声明了 变量a
    • 并且 给a赋值为1
  • 变量 是编程的基础
    • py程序是一行行编写的
    • python语言 也是一点点进化的
  • 作为 Guido业余爱好的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发挥了越来越大的作用

  • 这种作用就像本章的标题一样

  • 是指数级别的

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

ternary_op

图片描述

  • 先通过转化同一类型
  • 如果转化不了呢

无法相加

图片描述

  • 这个的源代码在哪?

图片描述

  • 就在abstract.c中
  • ternary_op函数里
    • 把运算符和操作数都抽象了
  • 具体的实现呢?

整型乘方

  • 整型的乘方是long_pow

图片描述

浮点型乘方

  • 浮点型的乘方是float_pow

图片描述

  • 如果字符串和整型运算会如何呢?
  • 这都谁写的呢?

作者

  • 好多的大牛
  • 这里也有Tim的代码
  • 还记得吗?
  • 让int 和 float能相加的人

图片描述

感恩

  • 这里面包括 python 之禅的作者 Tim Peters
    • 最初为 python 做出的进化

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的累积
    • 就像加法累积成乘法
    • 乘法累积成乘方一样
    • 积小胜为大胜
    • 积跬步以至千里
    • 积量变而质变
  • python
    • 终日都在向前进步
  • 乘方的逆运算是什么呢?
    • 开方
  • 开方怎么做的呢?🤪
  • 下次再说 👋