Python - 数据类型


计算机是一种数据处理设备。计算机将数据存储在内存中并按照给定的程序对其进行处理。数据是有关特定对象的事实的表示。

一些数据示例 -

  • 学生数据——姓名、性别、班级、分数、年龄、费用等。

  • 图书馆图书数据- 书名、作者、出版商、价格、页数、出版年份等。

  • 办公室员工的数据——姓名、职务、工资、部门、分支机构等。

数据类型代表一种值并决定可以对其进行哪些操作。数字、非数字和布尔(真/假)数据是最明显的数据类型。然而,每种编程语言都有自己的分类,很大程度上反映了其编程哲学。

Python 数据类型

Python 数据类型用于定义变量的类型。它定义了我们要在变量中存储的数据类型。存储在内存中的数据可以有多种类型。例如,一个人的年龄存储为数值,而他或她的地址存储为字母数字字符。

Python 有各种内置数据类型,我们将在本教程中讨论:

  • 数字 - 整数、浮点数、复数
  • 字符串 - str
  • 序列 - 列表、元组、范围
  • 二进制 - 字节、字节数组、内存视图
  • 映射 - 字典
  • 布尔值-bool
  • 设定 - 设定、冻结设定
  • 无 - 无类型
数据类型

Python 数字数据类型

Python 数值数据类型存储数值。当您为数字对象赋值时,就会创建它们。例如 -

var1 = 1       # int data type
var2 = True    # bool data type
var3 = 10.023  # float data type
var4 = 10+3j   # complex data type

Python 支持四种不同的数值类型,每种类型在 Python 库中都有内置类,分别称为int、bool、floatcomplex -

  • int(有符号整数)
  • bool(整数的子类型。)
  • float(浮点实数值)
  • 复数(复数)

Python 的标准库有一个内置函数type(),它返回给定对象的类。这里,它用于检查整数和浮点数的类型。

>>> type(123)
<class 'int'>
>>> type(9.99)
<class 'float'>

复数由实部虚部两部分组成。它们由“+”或“-”符号分隔。虚部后缀为“j”,即虚数。-1 的平方根 ($\sqrt{-1}$) 被定义为虚数。Python 中的复数表示为 x+yj,其中 x 是实部,y 是虚部。所以,5+6j 是一个复数。

>>> type(5+6j)
<class 'complex'>

布尔数只有两个可能的值,由关键字TrueFalse表示。它们分别对应整数1和0。

>>> type (True)
<class 'bool'>
>>> type(False)
<class 'bool'>

例子

以下是一些数字示例 -

整数 布尔值 漂浮 复杂的
10 真的 0.0 3.14j
0O777 错误的 15.20 45.j
-786 -21.9 9.322e-36j
080 32.3+e18 .876j
0x17 -90。 -.6545+0J
-0x260 -32.54e100 3e+26J
0x69 70.2-E12 4.53e-7j

例子

下面的例子展示了整数、浮点和复数的用法:

# integer variable.
a=100
print("The type of variable having value", a, " is ", type(a))

# boolean variable.
b=True
print("The type of variable having value", b, " is ", type(b))

# float variable.
c=20.345
print("The type of variable having value", c, " is ", type(c))

# complex variable.
d=10+3j
print("The type of variable having value", d, " is ", type(d))

Python 序列数据类型

序列是一种集合数据类型。它是一个有序的项目集合。序列中的项目具有从 0 开始的位置索引。它在概念上类似于 C 或 C++ 中的数组。Python 中定义了以下三种序列数据类型。

  • 字符串数据类型
  • 列表数据类型
  • 元组数据类型
Python 序列是有界且可迭代的——每当我们在 Python 中说可迭代时,它意味着序列数据类型(例如列表)。

Python 字符串数据类型

Python 字符串是一个或多个 Unicode 字符的序列,用单引号、双引号或三引号(也称为引号)括起来。Python 字符串是不可变的,这意味着当您对字符串执行操作时,您始终会生成相同类型的新字符串对象,而不是改变现有字符串。

只要包含相同的字符序列,单引号、双引号或三引号都没有关系。因此,以下字符串表示形式是等效的。

>>> 'TutorialsPoint'
'TutorialsPoint'
>>> "TutorialsPoint"
'TutorialsPoint'
>>> '''TutorialsPoint'''
'TutorialsPoint'

Python 中的字符串是str类的对象。可以用type()函数来验证。

>>> type("Welcome To TutorialsPoint")
<class 'str'>

字符串是一种非数字数据类型。显然,我们不能对其进行算术运算。但是,可以进行切片连接等操作。Python 的 str 类定义了许多有用的字符串处理方法。可以使用切片运算符([ ] 和 [:] )获取字符串的子集,索引从字符串开头的 0 开始,最后从 -1 开始。

在 Python 中,加号 (+) 是字符串连接运算符,星号 (*) 是重复运算符。例如 -

str = 'Hello World!'

print (str)          # Prints complete string
print (str[0])       # Prints first character of the string
print (str[2:5])     # Prints characters starting from 3rd to 5th
print (str[2:])      # Prints string starting from 3rd character
print (str * 2)      # Prints string two times
print (str + "TEST") # Prints concatenated string

这将产生以下结果 -

Hello World!
H
llo
llo World!
Hello World!Hello World!
Hello World!TEST

Python 列表数据类型

Python 列表是最通用的复合数据类型。Python 列表包含用逗号分隔并括在方括号 ([]) 内的项目。在某种程度上,Python 列表类似于 C 语言中的数组。它们之间的一个区别是,属于 Python 列表的所有项目可以具有不同的数据类型,而 C 数组可以存储与特定数据类型相关的元素。

>>> [2023, "Python", 3.11, 5+6j, 1.23E-4]

Python 中的列表是列表类的对象。我们可以使用 type() 函数来检查它。

>>> type([2023, "Python", 3.11, 5+6j, 1.23E-4])
<class 'list'>

如前所述,列表中的项目可以是任何数据类型。这意味着一个列表对象也可以是另一个列表中的项目。在这种情况下,它变成一个嵌套列表。

>>> [['One', 'Two', 'Three'], [1,2,3], [1.0, 2.0, 3.0]]
列表可以包含简单数字、字符串、元组、字典、集合或用户定义类的对象等项目。

可以使用切片运算符([ ] 和 [:])访问存储在 Python 列表中的值,索引从列表开头的 0 开始,一直到结束 -1。加号 (+) 是列表串联运算符,星号 (*) 是重复运算符。例如 -

list = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
tinylist = [123, 'john']

print (list)            # Prints complete list
print (list[0])         # Prints first element of the list
print (list[1:3])       # Prints elements starting from 2nd till 3rd 
print (list[2:])        # Prints elements starting from 3rd element
print (tinylist * 2)    # Prints list two times
print (list + tinylist) # Prints concatenated lists

这会产生以下结果 -

['abcd', 786, 2.23, 'john', 70.2]
abcd
[786, 2.23]
[2.23, 'john', 70.2]
[123, 'john', 123, 'john']
['abcd', 786, 2.23, 'john', 70.2, 123, 'john']

Python 元组数据类型

Python 元组是另一种类似于列表的序列数据类型。Python 元组由许多用逗号分隔的值组成。然而,与列表不同的是,元组包含在括号 (...) 内。

元组也是一个序列,因此元组中的每个项目都有一个索引来引用它在集合中的位置。索引从0开始。

>>> (2023, "Python", 3.11, 5+6j, 1.23E-4)

在Python中,元组是元组类的对象。我们可以使用 type() 函数来检查它。

>>> type((2023, "Python", 3.11, 5+6j, 1.23E-4))
<class 'tuple'>

与列表的情况一样,元组中的项目也可以是列表、元组本身或任何其他 Python 类的对象。

>>> (['One', 'Two', 'Three'], 1,2.0,3, (1.0, 2.0, 3.0))

要形成元组,可以选择使用括号。默认情况下,由逗号分隔且没有任何封闭符号的数据项被视为元组。

>>> 2023, "Python", 3.11, 5+6j, 1.23E-4
(2023, 'Python', 3.11, (5+6j), 0.000123)

列表和元组之间的主要区别是: 列表用方括号([])括起来,并且它们的元素和大小可以更改。即列表是可变的,而元组用括号(())括起来并且不能更新(不可变)。元组可以被认为是只读列表。例如 -

tuple = ( 'abcd', 786 , 2.23, 'john', 70.2  )
tinytuple = (123, 'john')

print (tuple)               # Prints the complete tuple
print (tuple[0])            # Prints first element of the tuple
print (tuple[1:3])          # Prints elements of the tuple starting from 2nd till 3rd 
print (tuple[2:])           # Prints elements of the tuple starting from 3rd element
print (tinytuple * 2)       # Prints the contents of the tuple twice
print (tuple + tinytuple)   # Prints concatenated tuples

这会产生以下结果 -

('abcd', 786, 2.23, 'john', 70.2)
abcd
(786, 2.23)
(2.23, 'john', 70.2)
(123, 'john', 123, 'john')
('abcd', 786, 2.23, 'john', 70.2, 123, 'john')

以下代码对于元组无效,因为我们尝试更新元组,这是不允许的。列表也可能出现类似的情况 -

tuple = ( 'abcd', 786 , 2.23, 'john', 70.2  )
list = [ 'abcd', 786 , 2.23, 'john', 70.2  ]
tuple[2] = 1000    # Invalid syntax with tuple
list[2] = 1000     # Valid syntax with list

Python 范围函数

Python range()是 Python 中的内置函数,它返回从 0 开始并递增到 1 的数字序列,直到达到指定数字。

我们使用range()函数与 for 和 while 循环来生成数字序列。以下是该函数的语法:

range(start, stop, step)

以下是所使用参数的说明:

  • start:指定起始位置的整数,(可选,默认值:0)
  • stop : 指定起始位置的整数(强制)
  • step : 指定增量的整数,(可选,默认值:1)

例子

以下是一个使用 for 循环打印从 0 到 4 的数字的程序 -

for i in range(5):
  print(i)

这会产生以下结果 -

0
1
2
3
4

现在让我们修改上面的程序以打印从 1 而不是 0 开始的数字:

for i in range(1, 5):
  print(i)

这会产生以下结果 -

1
2
3
4

再次,让我们修改程序以打印从 1 开始的数字,但增量为 2 而不是 1:

for i in range(1, 5, 2):
  print(i)

这会产生以下结果 -

1
3

Python 字典数据类型

Python 字典是一种哈希表类型。字典键几乎可以是任何 Python 类型,但通常是数字或字符串。另一方面,值可以是任意 Python 对象。

Python 字典类似于 Perl 中的关联数组或哈希,由键:值对组成。这些对以逗号分隔并放在大括号 {} 内。为了建立键和值之间的映射,在两者之间放置分号':'符号。

>>> {1:'one', 2:'two', 3:'three'}

在Python中,字典是内置dict类的对象。我们可以使用 type() 函数来检查它。

>>> type({1:'one', 2:'two', 3:'three'})
<class 'dict'>

字典用大括号 ({ }) 括起来,并且可以使用方括号 ([]) 分配和访问值。例如 -

dict = {}
dict['one'] = "This is one"
dict[2]     = "This is two"

tinydict = {'name': 'john','code':6734, 'dept': 'sales'}


print (dict['one'])       # Prints value for 'one' key
print (dict[2])           # Prints value for 2 key
print (tinydict)          # Prints complete dictionary
print (tinydict.keys())   # Prints all the keys
print (tinydict.values()) # Prints all the values

这会产生以下结果 -

This is one
This is two
{'dept': 'sales', 'code': 6734, 'name': 'john'}
['dept', 'code', 'name']
['sales', 6734, 'john']

Python 的字典不是序列。它是项目的集合,但每个项目(键:值对)不像字符串、列表或元组那样由位置索引标识。因此,不能对字典进行切片操作。Dictionary 是一个可变对象,因此可以使用 dict 类中定义的相应功能执行添加、修改或删除操作。这些操作将在后续章节中解释。

Python 设置数据类型

Set 是数学中定义的集合的 Python 实现。Python 中的集合是集合,但不是字符串、列表或元组等索引或有序集合。一个对象在集合中不能出现多次,而在列表和元组中,同一对象可以出现多次。

集合中以逗号分隔的项目放在大括号或大括号 {} 内。set 集合中的项目可以具有不同的数据类型。

>>> {2023, "Python", 3.11, 5+6j, 1.23E-4}
{(5+6j), 3.11, 0.000123, 'Python', 2023}

请注意,set 集合中的项目可能不会遵循它们输入的顺序。Python 优化了项目的位置,以按照数学中的定义对集合执行运算。

Python 的 Set 是内置set类的对象,可以使用 type() 函数检查。

>>> type({2023, "Python", 3.11, 5+6j, 1.23E-4})
<class 'set'>

集合只能存储不可对象,例如数字(int、float、complex 或 bool)、字符串或元组。如果您尝试将列表或字典放入 set 集合中,Python 会引发TypeError

>>> {['One', 'Two', 'Three'], 1,2,3, (1.0, 2.0, 3.0)}
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

散列是计算机科学中的一种机制,可以更快地搜索计算机内存中的对象。只有不可变对象才是可哈希的

即使集合不允许可变项,集合本身也是可变的。因此,允许使用内置集合类中的方法对集合对象进行添加/删除/更新操作。Python 还有一组运算符来执行集合操作。方法和运算符在后面的章节中解释

Python 布尔数据类型

Python布尔类型是内置数据类型之一,表示TrueFalse两个值之一。Python bool()函数允许您计算任何表达式的值,并根据表达式返回 True 或 False。

例子

以下是打印布尔变量 a 和 b 的值的程序 -

a = True
# display the value of a
print(a)

# display the data type of a
print(type(a))

这会产生以下结果 -

true
<class 'bool'>

以下是另一个计算表达式并打印返回值的程序:

# Returns false as a is not equal to b
a = 2
b = 4
print(bool(a==b))

# Following also prints the same
print(a==b)

# Returns False as a is None
a = None
print(bool(a))

# Returns false as a is an empty sequence
a = ()
print(bool(a))

# Returns false as a is 0
a = 0.0
print(bool(a))

# Returns false as a is 10
a = 10
print(bool(a))

这会产生以下结果 -

False
False
False
False
False
True