一、什么是数据类型?
无论是在生活中还是在程序里,“数据”都是一个很重要的东西。我无论是用Python来进行数据分析或是做爬虫等各方面的应用,肯定少不了跟各种的数据打交道。那么这就首先要涉及到“数据类型”这一概念。
对于程序而言,数据类型涉及到这一个数据具体是怎么被处理、编码、运算的。不过这是我们初学者并不需要深究的。
对于我们而言,不同种类的数据,需要用不同的数据类型进行存储,而不同的数据类型也就意味着它们拥有不同的函数
和方法
。
举个生活中的例子:
实数1
是个“数”,而苹果
是种“食物”,它们是不同的“数据类型”。
我们可以对数1
进行加减乘除等运算,但是没有苹果
÷橘子
这种操作;我们可以吃苹果
,但是不能吃1
,这便是“不同的数据类型拥有不同的函数和方法”。
有的时候,对我们来说的样同一个数据,也可以被程序存储为不同的数据类型。
比如整数
1
和字符串'1'
在我们看来或许是一样的,它都表达了“一、一个”的意思,但是对于程序来说是截然不同的两种东西。
这些关于数据类型的,无论是常识性的,还是反常识的特点,就是我们今后所要注意不要被坑到,并且要加以利用的特点。
二、Python最基本的数据类型
如果我给你们讲关于小行星612的这些细节,并且告诉你们它的编号,这是由于这些大人和他们行为方式的缘故。大人们喜欢数字。当你对他们说你交了一个新朋友时,他们从来不向你提出实质性的问题。他们从来不讲:“他说话声音像什么?他最喜爱什么样的游戏?他是否收集蝴蝶标本?”相反,他们会问你:“他多大年纪呀?弟兄几个呀?体重多少磅呀?他父亲挣多少钱呀?”只有从这些数字信息,他们才觉得他们了解了他。如果你对大人们说:“我看到一幢用玫瑰色的砖盖成的漂亮的房子,窗台上摆着天竺葵,屋顶上还有鸽子……”他们无法对这个房子有任何感觉。如果你这样对他们说:“我看见了一幢价值十万法郎的房子。”那么他们就惊叫道:“多么漂亮的房子啊!”
——摘自《小王子》第四章
无论是我们人类语言还是程序语言,描述事物的最简单的方法便是用数
和字符
来进行刻画。
所以这一期我们我们来讲讲最最基本的两个数据类型:数(number)
和字符串(string)
。
数(number)
或许你已经听说过,Python的一大特点就在于变量不需要事先声明类型就可以直接赋值。这一特点或许节省了我们的代码量,使代码更易写。
更重要的是,这一特性弱化了在Python中整形(int)
浮点型(float)
等数据类型的界限。
在需要提前声明变量的语言里,如果你声明了变量a
是整形的,那么即使赋值时给它赋值一个小数,最终它存储的仍旧是整数部分。
而在Python中,正是因为我们不用,也无法告诉程序某一个变量必须是什么数据类型的。所以在赋值的时候,不论是整形或是浮点型,都会被Python 照单全收。
并且,不论是整形还是浮点型,在我们看来都不过是实数罢了。
即使在Python内部也是有定义整形或是浮点型的,但是它们对外的表现是一样的(拥有同样的函数和方法)。
我们并不需要过分地纠结,只用知道有一类数据类型它存储着实实在在能够运算的数学意义上的数
就好了
下举一例:
a = 1 #赋值(整数)
b = 2.3 #赋值(小数)
c = a + b #加法运算
print(type(a)) #type()函数能返回一个对象/变量的数据类型
print(type(b))
print(type(c))
<class 'int'>
<class 'float'>
<class 'float'>
可以看到,我们给变量赋值一个实数的时候,程序会自动判断它是整形还是浮点型,并且在程序内部是有数据类型的区分的。我们可以使用“强制类型转换”int()
float()
来指定这个数是什么类型的。如下:
a = 1 #整形
b = 2.9 #浮点型
c = float(a) #用float()将整形a强制转换为浮点型并赋值给c
d = int(b) #用int()将整形b强制转换为浮点型并赋值给d
print(c)
print(d)
1.0
2
可以看到,对一个整形强制转换为浮点型以后,在输出时就会加上小数“点零”;对一个浮点型强制转换为整形的话,就会输出它的整数部分(去尾)。
字符串
字符串在程序内部,不过也是一段二进制的编码罢了,不过当字符串被显示在了屏幕上的时候,就变成了我们人类可以看得懂的文字。所以说,字符串其实是程序与人类沟通的一座桥梁。
回到开篇的《小王子》中的问题:“他多大年纪呀?弟兄几个呀?体重多少磅呀?他父亲挣多少钱呀?”
我们用Python来写可以是:
那么程序便分别把年龄、兄弟个数、体重、父亲工资分别存储在了 a, b, c, d 四个变量里。
可是如果我们直接打印这四个变量:
别的人并不知道这四个变量到底代表的是什么意思。所以这时候,我们的字符串
便登场了:
从上面这个例子便很好的解释了为什么我们说“字符串其实是程序与人类沟通的一座桥梁”。
同时我们也注意到了我在print()
中用了三种方式将字符串和变量进行组合然后显示出来。这也体现了Python的灵活之处。
更多关于
print()
函数的用法和操作可以参考菜鸟教程的这两篇文章:Python print() 函数,Python3 print 函数用法总结
三、下一期博客的剧透
在上面那个例子中,我们用了四个独立的、身份地位相等的变量a
b
c
d
来去分别储存一位朋友的信息。
但如果我们需要存储很多人员的信息,像这样用零散的、独立的变量来储存数据是行不通的。
这些数据一定要以某种顺序、方式、结构组织起来,这样才能方便我们以后的读取、运算、分析等操作。
由于这样的需求,我们便引入了列表(list)
元组(tuple)
字典(dictionary)
集合(set)
等一系列的数据类型。
但其实说白了,这些数据类型只不过是存储别的数据的数据类型(此处应有弹幕“禁止套娃”)
下一期博客,我们就来聊一聊这些“擅长套娃的数据类型”