|
|
|
|
移动端

2.3.2 第一个Python程序:Word Count

《精通数据科学:从线性回归到深度学习》第2章Python安装指南与简介:告别空谈,本章介绍数据科学中最常用的IT工具:Python以及相关第三方库。本节为大家介绍第一个Python程序:Word Count。

作者:唐亘来源:人民邮电出版社|2018-05-24 09:22

技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

2.3.2 第一个Python程序:Word Count

在以往的IT类书籍中,介绍一种编程语言的第一个程序都是“Hello World”。但本书针对数据科学,所以第一个Python程序也与时俱进地改为了大数据版的“Hello World”:“Word Count”。完整的程序脚本放在随书配套的代码/ch02-python/word_count.py。在终端里执行“python word_count.py”命令就可以运行这个程序了,下面让我们来仔细看看这个程序的代码。

程序清单2-11 Word Count

  1. 1    |  # -*- coding: UTF-8 -*-  
  2.  2    |    
  3.  3    |  def wordCount(data):  
  4.  4    |      """  
  5.  5    |      输入一个字符串列表,统计列表中字符串出现的次数  
  6.  6    |    
  7.  7    |      参数  
  8.  8    |      ----  
  9.  9    |      data : list[str], 需要统计的字符串列表  
  10. 10    |    
  11. 11    |      返回  
  12. 12    |      ----  
  13. 13    |      re : dict, 结果hash表,key为字符串,value为对应的出现次数  
  14. 14    |      """  
  15. 15    |      re = {}  
  16. 16    |      for i in data:  
  17. 17    |          re[i] = re.get(i, 0) + 1  
  18. 18    |      return re  
  19. 19    |    
  20. 20    |    
  21. 21    |  if __name__ == "__main__":  
  22. 22    |      data = ["ab", "cd", "ab", "d", "d"]  
  23. 23    |      print "The result is %s" % wordCount(data)  
  24. 24    |      # The result is {'ab': 2, 'd': 2, 'cd': 1} 

(1)程序脚本的第一行表示这个脚本的编码为UTF-8。如果脚本需要用到中文字符,不要忘记在脚本开头加上这一句。

(2)程序清单2-11的第3~18行代码在定义wordCount函数。这个函数有一个参数“data”。正如前面介绍的,读者可以看到Python 不使用大括号,而使用缩进来定义语句块,如图2-12所示。因此在书写Python代码时,需要特别关注代码的对齐。这是为什么在程序员中流传着开发Python代码需要购买游标卡尺的说法。当然这只是个玩笑话,常见的开发工具如Vim、IPython、Spyder等都提供代码自动对齐功能。

(3)函数名的下面是一个字符串,如第4~14行代码所示。它是函数的说明文档,记录着函数功能的描述,以及函数参数和返回值的定义。这个字符串虽然对函数功能没有任何影响,甚至可以不写,但它对Python程序工程化非常重要。假设你和小安是同事,在某个项目中,你需要调用小安开发的函数A。而小安在开发时为图简单,并没有给函数A写上说明文档。由于Python的语法规定一个函数在定义时,既不需要声明参数类型,也不需要定义返回值的个数和它们的类型,无法做静态类型检查。你沮丧地发现,即使通读一遍小安的源代码,也很难知晓如何使用这个函数,甚至不知道应该传送怎样的参数,会得到什么样的返回。于是,你要求小安按照如上面的格式补充说明文档。小安按要求修改后,你就可以在使用时,通过命令“A.__doc__”来阅读对应的说明文档(参考2.3.1节)。

(4)如果读者以前接触过其他编程语言(比如Java),会觉得奇怪:A不是一个函数么,为什么函数也有属性“__doc__”呢?这是Python的另外一个特性。在Python中,所有东西都是对象,连函数也是对象,所以A作为函数也有自己的属性。

(5)在函数说明文档下面,我们定义了一个空的dict类型变量“re”。dict类型可以翻译为字典类型,是Python的5个基本类型之一。现实中的字典里面记录了字和对应的解释。从结构上看,字典其实是一堆键值对(key value pair),字为键(key),而对应的解释为值(value)。而dict也一样,是一个键值对的集合。如果读者对数据结构比较了解,会发现dict其实就是一个Hash表。如果使用Python开发,就会发现dict十分灵活、实用。它也是作者最喜欢的数据类型。

(6)在Python中,dict的书写形式如下:用“{}”将所有值括起来,健与值之间用“:”隔空,键值对之间用“,”隔开,如第24行代码所示。

(7)在程序清单2-11里,我们使用“re”来记录word count的结果,即键为字符串,值为对应的出现次数。所以在定义完“re”之后,我们遍历“data”列表中的每一个字符串,并对“re”中对应的值加1(如果字符串x是第一次出现,则在“re”中插入键值对(x: 1))。

(8)程序清单2-11的第21~23行代码是脚本的测试部分。我们在这里创建了一个字符串列表,并将它传给定义好的函数wordCount。

(9)为什么说它是测试代码呢?正如第(4)点中提到的那样,在Python中,所有内容都是对象。脚本本身也被当作模板(modules)对象,而模板对象有一个内置属性“__name__”(值得注意的是,“name”前后也是双下划线)。这个属性的赋值依赖于用户怎么使用它:如果直接运行它,比如“python wordCount.py”,“wordCount.py”的“__name__”属性就等于“__main__”。如果把它作为库,在其他程序使用“import wordCount”时,wordCount.py的“__name__”属性就等于“wordCount”。因此大家常常使用这个技巧来做简单的测试,或者把它作为程序的主入口,比如Java中的main函数。

读到这里,希望读者已经能理解word_count.py中的Python代码了。下面将讨论更多Python编程的基础知识。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

网管第一课——网络组建与管理

本书针对初级网管朋友所需掌握的网络组建和网络管理技能,以示例方式编写而成,其主要特点就是实用性和可操作性非常强。 全书共分8章,分...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊