简介
在学习数据类型之前我们要先回答一个问题:为什么计算机要有数据类型呢?计算机不是很NB,很智能吗,为什么会需要人类标注好数据的具体类型呢?这里就要从计算机的角度看一下数据是什么形式的了,举个例子:Jove 和 1234,这两个数据在我们看来是很清晰的,左边的是字符串,右边是数字,但是在计算机看来可能是 1010111001 和 10101101 的两串二进制编码,无论是人还是计算机都无法从这两串二进制编码当中确定是字符串还是数字,但是在人类平时书写开的字符看来就很容易区分出,这样我们就需要标记一下(如:str Jove 和 int 1234),才能更好的发挥计算机的运算优势了。所以这就产生了数据类型的概念。
在Python中,基本数据类型指的是一些最基本的数据类型,包括数字(int、float等)、字符串(str)、布尔值(bool)和空值(None)。这些基本数据类型在Python中都有对应的内置函数和操作符,可以进行各种运算和操作。另外,Python还支持其他高级数据类型,如列表、元组、字典和集合,它们是基本数据类型的扩展。下面我们会把基本数据类型分为上下两篇,上篇将讲述数字、字符串、布尔值和空值,下篇将讲述高级数据类型。
数字
一、int------整数
在Python当中的整数就是39、34732、27343748372、-487287、-23、0,即包括正整数、负整数和0。不同的位数的整数需要的内存也不同,由于早期的计算机内存都很小,所以很多高级编程语言(C、C++、Java、Python)都对整数的数据类型再进行了细分,例如,short、int、long、long long 这些整数数据类型,这些具体语言之间会有不同的定义,而在 Python3 中则定义了 int 和 long 两种类型,它们两个区别为 int 可存储的大小为2^62,long 可存储的大小为无限大,Python 会自动根据输入的长度来切换选择不同的数据类型,在 Java 和 C++ 中这些都是要提前定义的,如果程序中途需要转换都是需要进行强制转换的。下面我们来看看细分出来的两个数据类型
1、int
python
age = 23 # 定义 int 变量
type(age) # type() 方法可以查看数据类型
2、long
到这里会发现一个奇怪的现象,我们使用Python的介绍与安装中安装的 Python3 使用 type(2**64) 查看的时候会发现显示的数据类型还是 int,这种现象就是 Python3 的新特点了,Python2 中如果输入这个的话是会显示 long 的,这是因为龟叔在更新 Python3 的时候发现由于 Python 创建变量的时候无需定义数据类型,而且还能自动的扩展,那就干脆把 long 给干掉了,直接归入了 int 当中,所以在 Python3 中整数就只剩下 int 这个子数据类型了。
值得一提的还有整数类型还能表达十进制、八进制、十六进制和二进制。十进制,在 Python2 中如果输入的数较大,导致数据位数较多的时候,会自动在最后加上 L 或者 l,在 Python3 中优化了这一项;八进制,在 Python2 中可以以0为开头,而在 Python3 中则必须以0o或者0O开头,其中 oct() 是将一个数转换为八进制形式的方法;十六进制,在 Python 中是以0x或者0X开头,其中 hex() 是将一个数转换为十六进制形式的方法;二进制,在 Python 中是以0b或者0B 开头,其中 bin() 是将一个数转换为二进制形式的方法。
二、float------浮点数(≈小数)
浮点数在 Python 中并不是很复杂,而在Python中,浮点数没有固定的数据类型,它可以使用 float、double 或者 decimal 模块中的 Decimal 来表示,其实也可以把 Python 中的浮点数约等于为 double;在 C、C++ 中就需要明确分为 float、double以及long double;Java 中就需要明确分为 float和double。
从精度来说 C 和 C++ 中的 float 类型通常使用4个字节,可以表示大约6位有效数字,而 double 类型通常使用8个字节,可以表示大约15位有效数字;Java 中,float 类型使用4个字节,可以表示大约6到7位有效数字,而 double 类型使用8个字节,可以表示大约15位有效数字;Python 中的 float 类型通常使用8个字节,可以表示大约15位有效数字,而 Decimal 类型可以提供更高的精度,字节数来看 Python 中的 float 是和其他语言的 double 是完全相同的。
从表示范围来说 C 和 C++ 中的 float 类型的取值范围约为1.2e-38到3.4e+38,而 double 类型的取值范围约为2.3e-308到1.7e+308;Java 中,float 类型的取值范围约为1.4e-45到3.4e+38,而 double 类型的取值范围约为4.9e-324到1.7e+308;Python 中的 float 类型的取值范围与 C 和 C++ 中的 double 类型相似,而 Decimal 类型的取值范围可以由用户自定义。
从占用内存来说 C 和 C++ 中的浮点数通常会根据编译器和操作系统的不同来决定占用的内存空间;Java 中,float 类型占用4个字节,double 类型占用8个字节;Python 中的 float 类型占用8个字节,而 Decimal 类型的内存占用取决于用户设置的精度。
在这里看来 Python 对于人类已经非常友好了,在其他语言里(C、C++、Java)必须在声明变量前先定义好其类型,输入错了类型或者是定义错了会报错,其他语言里(C、C++、Java)这类的编程语言被称为强类型语言,而 Python 就被定义为弱类型语言。
字符串
从字符串表示方式来看,Python 中字符串是以单引号或双引号括起来的字符序列,Python中的字符串是可变的,可以通过索引、切片等方式来修改字符串;C 中字符串是以字符数组的形式表示,以'\0'结尾作为字符串的结束符号;C++ 中字符串可以使用字符数组或者 string 类进行表示;Java 中字符串是通过 string 类进行表示,Java 中的字符串是不可变的,也就是说不能直接修改字符串的内容。
从字符串操作来看,Python 中字符串可以通过+运算符进行拼接,还可以使用一些内置方法来进行字符串的复制、连接、比较、查找、替换等;C中可以通过字符数组的方式进行一些基本的字符串操作,如复制、连接、比较等;C++ 中可以使用 string 类来进行字符串操作,包括复制、连接、比较、查找、替换等,还可以通过重载运算符来进行字符串的拼接和比较;Java 中 string 类提供了一系列方法来进行字符串操作,包括复制、连接、比较、查找、替换、大小写转换等。
从字符串的编码方式来看,Python 中字符串的编码方式可以是 ASCII、UTF-8 等,Python 中的字符串是以 Unicode 编码方式进行存储的,可以通过 encode 和 decode 方法进行编码和解码;C 中,字符串的编码方式是由字符数组的存储方式决定的,常见的编码方式有 ASCII、UTF-8 等;C++ 中默认的字符串编码方式也是由字符数组的存储方式决定的,但是可以使用 wstring 类来表示宽字符字符串;Java 中字符串的编码方式是 Unicode,Java 中的字符串是以 UTF-16 编码方式进行存储的。
下面来看看具体的用法
一、定义
python
name = "Jove" # 有双引号就是字符串
name = 'Jove' # 单引号也是可以的
name = '''Jove''' # 三引号也是可以的
为什么 Python 里面会有这么多个引号呢?这是为了下面的操作
python
name = 'this is my "bady".'
name = "I'm Jove"
name = '''I'm Jove,this is my "bady".'''
单引号就是为了字符串里面可以使用双引号,双引号就是为了字符串里面可以使用单引号,三个单引号就是为了字符串里面可以使用单引号和双引号同时也是一个段落(后面会说到),总的来说这三种方式配合可以完整的在字符串当中表达英文的书写模式,也可以很好的区分出那里是字符串的开头,那里是字符串的结尾。
二、拼接
Python 中的字符串是可以进行拼接的,甚至还能进行运算,而运算时是使用 ASCII(美国信息交换标准代码)中的数字表是字符的值,下面我们看看示例
1、两个字符串之间拼接
python
s1 = "床前明月光"
s2 = " 疑似地上霜"
s1 + s2
# Python2 会显示字符编码
2、一个字符串重复三遍并拼接在一起
python
s1 * 3
三、段落
Python 中所说的段落就是所谓的多行,如下代码所示
python
do_what = '''
No.1 play football
No.2 play basketball
'''
布尔值(bool)
Python 中是通过 bool 关键字来表示的。布尔类型的取值也只有两个:True 和 False,与 C、C++ 和 Java 不同的是,Python 中的布尔类型是整数类型的子类型,可以看作是整数的子集,其中 True 对应于整数1,False 对应于整数0;C 中布尔类型是通过 <stdbool.h> 库中的bool关键字来表示的,布尔类型的取值只有两个:true(非零)和 false(零);C++ 中布尔类型是通过 <stdbool.h> 库中的 bool 关键字来表示的,与 C 中的布尔类型相同,布尔类型的取值也只有两个:true(非零)和false(零);Java 中布尔类型是通过 boolean 关键字来表示的,布尔类型的取值只有两个:true和false,与C和C++不同的是,Java中的布尔类型不是整数类型的子类型,它是独立的基本数据类型。下面我们来看一下具体的例子
python
a = 3
b = 5
这里是两个变量,我们应该如何表达 b>a 是否正确的呢?
python
b>a 正确/成立 真 True
b>a 错误/不成立 假 False
从上面变量的定义来看,这个结果应该是 True
如果翻过来则是 a>b,这个结果应该是 False
布尔类型的作用是什么呢?布尔类型其实应用非常广泛,只要是有关抉择的事情都需要用到,就像下面看是否下雨而做出不同动作的示例一样
python
# 以下为伪代码
if today == raining # 成立则为 True
print(带伞)
else # 这个就是 False
print(不带伞)