我们能否像神一样地创建一个世界?

Gerapy是一个Scrapy分布式管理模块,本节就来介绍一下它的安装方式。

Dictionary和hashtable用法有点相似,他们都是基于键值对的数据集合,但实际上他们内部的实现原理有很大的差异,

对于创建世界而言,程序员的创作能力最接近于神——相对于导演,作家,漫画家而言,他们创建的世界(作品)一旦完成,就再也不会变化,创建的角色再也不会成长。而程序员创建的世界,每次运行都可以有不一样的内容,而且最为重要的,我们还能给与角色不能学习的能力(AI[人工智能])。本章就向你展示程序员像神一样创建世界的可能性以及为什么这一系列的文章叫《编程哲学》。

1. 相关链接

  • GitHub:

先简要概述一下他们主要的区别,稍后在分析Dictionary内部实现的大概原理。

创世纪

  • 起初…空虚混沌,渊面黑暗
  • 神说:要有光
    • 于是,就有了光…
  • 神说:天上要布满星辰
    • 于是,宇宙间布满了数不清的大大小小的星球…
  • 神说:水应聚集在一起,使旱地显露
    • 于是,有了陆地与海洋…
  • 神说:陆地上要生出草木和各种蔬菜
    • 于是,整个大地上一片生机盎然…
  • 神说:水中要有众多的鱼,天空中要有无数的鸟
    • 于是,世间出现了各种各样的鱼和飞鸟…
  • 神说:要有人
    • 于是,神照着自己的形像造人…
      • 人通过观察与学习…
        • 人说: 要有光

2. pip安装

这里推荐使用pip安装,命令如下:

pip3 install gerapy

区别:

人创造的世界(宇宙)

3. 测试安装

安装完成后,可以在Python命令行下测试:

$ python3
>>> import gerapy

如果没有错误报出,则证明库已经安装好了。

  1. Dictionary支持泛型,而Hashtable不支持。
  2. Dictionary没有装填因子(Load
    Facto)概念,当容量不够时才扩容(扩容跟Hashtable一样,也是两倍于当前容量最小素数,比如当前数组长度是3,那么新数组长度为7(2×3=6,比6大的最小素数是7),Hashtable是“已装载元素”与”bucket数组长度“大于装载因子时扩容。
  3. Dictionary内部的存储value的数组按先后插入的顺序排序,Hashtable不是。
  4. 当不发生碰撞时,查找Dictionary需要进行两次索引定位,Hashtable需一次,。

    Dictionary采用除法散列法来计算存储地址,想详细了解的可以百度一下,简单来说就是其内部有两个数组:buckets数组和entries数组(entries是一个Entry结构数组),entries有一个next用来模拟链表,该字段存储一个int值,指向下一个存储地址(实际就是bukets数组的索引),当没有发生碰撞时,该字段为-1,发生了碰撞则存储一个int值,该值指向bukets数组.

发表评论

电子邮件地址不会被公开。 必填项已用*标注