基本数据结构
对数据结构有透彻理解,是程序员必须具备的最基本的技能之一。不论你是要写机器学习项目,还是在大型代码库中工作,建立和管理网站,或者编写算法,它都会对你有重要帮助。
数值数据类型和结构
最重要的两种数值数据类型是整数和浮点数。整数是不含浮点的正数或负数(例如3),浮点数是带有浮点精度的正数或负数(例如3.14159265359)。Python提供了多种内建的数值运算,以及在这些数值类型之间互相转换的功能。仔细研究一下清单1-1,便可以掌握这些非常重要的数值运算。
清单1-1:数值数据类型
大部分运算符的含义都是不言自明的,注意一下//运算符执行的是整除,结果是一个向下取整的整数值(例如,3//2==1)。
布尔值
一个布尔型的变量的值为False或True。在Python中,布尔类型和整数类型有着紧密的关联:布尔类型在内部实现上实际用的是整数值(布尔值False默认用0表示,布尔值True默认用1表示)。清单1-2给出了这两个布尔关键值的示例。
清单1-2:布尔值False和True
对给定的表达式进行计算后,变量x被赋予布尔值False,变量y被赋予布尔值True。
在Python中,可以使用布尔值和三个重要的关键字一起写出更复杂的表达式。
关键字:and,or和not
布尔表达式代表了基本的逻辑运算,把它们跟下面三个关键字组合运用,就能制作出各种各样的、可以非常复杂的表达式。
and 表达式x和表达式y 的值都为True,则x and y 的值为True。表达式x 和y 任何一个的值为False,则整个表达式的值为False。
or x的值为True或y 的值为True(或两个都为True),则表达式x or y 的值为True。即,只要其中任何一个表达式的值是True,整个表达式的值就是True。
not 如果x的值是False,则not x 的值为True。否则,表达式的值为False。
考虑清单1-3中的Python代码。
清单1-3:关键字and,or和not
使用这三个关键字,可以写出你所需要的所有逻辑表达式。
布尔运算符的优先级
布尔运算符的计算顺序,是理解布尔逻辑表达式的一个重要方面。比如说,考虑这句自然语言的陈述:“今天下雨且寒冷或刮风”,我们可以用两种方式去解释:
“(今天下雨且寒冷)或刮风”,在这种情况下,如果刮风了,整个陈述就是True,即使没有下雨也是如此。
“今天下雨了且(寒冷或刮风)”,然而,如果这样理解,那么只要不下雨,整个陈述就是False,不论寒不寒冷,有没有刮风。
布尔运算的顺序很重要。这句话的正确理解方式是第一种,因为and运算符优先于or运算符。考虑清单1-4的代码片段。
清单1-4:布尔数据类型
这段代码展示了两个关键点。首先,布尔运算符按照优先级依序计算,运算符not具有最高的优先级,接着是and,然后是or。其次,下面这些值会被自动判为False:关键字None、整数值0、浮点值0.0、空字符串,以及空的容器类型。
字符串
Python字符串是字符组成的序列。字符串是不可变类型,创建以后就不能修改。虽然还有别的创建方法,但下面这五个是最常用到的:
使用单引号'Yes'
使用双引号 "Yes"
使用三重引号声明多行字符串'''Yes'''或 """Yes"""
字符串函数 str(5)=='5'is True
连接'Py'+'thon'得到'Python'
你会经常需要在字符串中显式地使用空白字符。最常用到的空白字符包括换行符\n、空格字符\s,以及tab制表符\t。
清单1-5展示了最重要的字符串方法。
清单1-5:字符串数据类型
这些非字符串独有的方法,显示了字符串数据类型的强大,很多常见的字符串问题,通过Python内置的方法就能很好地解决了。如果你不清楚如何得到某种想要的特定输出结果,可以去查阅在线的语言参考,那里列出了所有内建的字符串方法,网址见链接列表1.1条目。
布尔值、整数、浮点数和字符串是Python中最重要的基本数据类型。不过通常除了创建这些数据,还需要把它们以某种结构组织起来,容器类型就是解决这类需求的答案。但在深入了解容器数据结构之前,我们先快速学习一种重要的特殊数据类型:None。
关键字None
关键字None是Python的一个常量,它的含义是没有值。其他的编程语言比如Java会用null来表示,可是null这个术语经常令初学者感到困惑,他们会以为这个值就是整数0。而Python选择了关键词None,来表示它跟数值0、空列表、空字符都不一样,如清单1-6所示。有趣的是,NoneType数据类型只有一个可能取值,也就是None。
清单1-6:使用关键字None
这段代码展示了使用None数据类型的几个例子(以及它不是什么)。如果你没有为一个函数指定返回值,默认的返回值是None。