Python - 数据类型



Python 数据类型

Python 数据类型实际上是类,定义的变量是它们的实例或对象。由于 Python 是动态类型的,因此变量的数据类型是在运行时根据分配的值确定的。

通常,数据类型用于定义变量的类型。它表示我们要存储在变量中的数据类型,并确定可以对其执行哪些操作。

每种编程语言都有自己的数据项分类。通过这些数据类型,我们可以存储不同类型的数据值。

Python 中的数据类型

Python支持以下内置数据类型 -

  • Numeric 数据类型
    • int
    • flot
    • complex
  • String 数据类型
  • Sequence 数据类型
    • list
    • tuple
    • range
  • Binary 数据类型
    • bytes
    • bytearray
    • memoryview
  • Dictionary 数据类型
  • Set 数据类型
    • set
    • frozenset
  • Boolean 数据类型
  • None 类型

data_types

1. 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,float 和 complex :

  • int (有符号整数)
  • float (浮点实际值)
  • complex (复数)

复数由两部分组成 :实数和虚数。它们用“+”或“-”号分隔。虚部以“j”为后缀,即虚数。-1 ([数学处理错误]−1),定义为虚数。Python 中的复数表示为 x+yj,其中 x 是实部,y 是虚部。所以,5+6j 是一个复数。


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

以下是一些数字示例 -

int float complex
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))

# 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))

2. Python 字符串数据类型

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

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


>>> 'QikepuCom'
'QikepuCom'
>>> "QikepuCom"
'QikepuCom'
>>> '''QikepuCom'''
'QikepuCom'

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


	>>> type("Welcome To Qikepu.Com")
<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

3. Python 序列数据类型

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

  • List 数据类型
  • Tuple 数据类型
  • Range 数据类型

Python 序列是有界的和可迭代的 - 每当我们在 Python 中说 iterable 时,它意味着序列数据类型(例如,列表)。

(a) Python List 数据类型

Python List 是最通用的复合数据类型。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 列表中的值,索引从列表的开头开始,一直到结束 -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']

(b) Python Tuple 数据类型

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

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


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

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


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

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


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

要形成 Tuple,括号的使用是可选的。默认情况下,用逗号分隔而没有任何封闭符号的数据项将被视为 Tuple。


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

Tuple 数据类型示例


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')

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

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


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

(c) Python Range 数据类型

Python 范围是一个不可变的数字序列,通常用于遍历特定数量的项目。

它由 Range 类表示。此类的构造函数接受从 0 开始并递增到 1 的数字序列,直到达到指定的数字。以下是函数的语法 -


 range(start, stop, step)

以下是所用参数的描述 -

  • start:指定起始位置的整数,(可选,默认值:0)
  • stop:用于指定结束位置的整数(必填)
  • step:指定增量的整数,(可选,默认值:1)
Range 数据类型的示例

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


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

这将产生以下结果 -

0
1
2
3
4

现在让我们修改上面的程序,打印从 2 开始的数字而不是 0 -


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

这将产生以下结果 -

2
3
4

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


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

这将产生以下结果 -

1
3

4. Python 二进制数据类型

Python 中的二进制数据类型是一种将数据表示为一系列二进制数字的方法,这些二进制数字是 0 和 1。它就像计算机理解的一种特殊语言,可以有效地存储和处理信息。

这种类型的数据通常用于处理文件、图像或任何可以仅使用两个可能值表示的内容。因此,二进制序列数据类型不使用常规数字或字母,而是使用 0 和 1 的组合来表示信息。

Python 提供了三种不同的方法来表示二进制数据。它们如下 -

  • bytes
  • bytearray
  • memoryview

让我们分别讨论这些数据类型中的每一种 -

(a) Python Bytes 数据类型

Python 中的 byte 数据类型表示字节序列。每个字节都是介于 0 和 255 之间的整数值。它通常用于存储二进制数据,例如图像、文件或网络数据包。

我们可以在 Python 中使用内置的 bytes() 函数或在数字序列前面加上 b 来创建字节。

Bytes 数据类型示例

在以下示例中,我们使用内置的 bytes() 函数来明确指定表示 ASCII 值的数字序列 -


# Using bytes() function to create bytes
b1 = bytes([65, 66, 67, 68, 69]) 	
print(b1) 	

获得的结果如下 -

b'ABCDE'

在这里,我们在字符串之前使用“b”前缀来自动创建字节对象 -


# Using prefix 'b' to create bytes
b2 = b'Hello' 	
print(b2) 	

以下是上述代码的输出 -

b'Hello'

(b) Python Bytearray 数据类型

Python 中的 bytearray 数据类型与 bytes 数据类型非常相似,但有一个关键区别:它是可变的,这意味着您可以在创建后修改存储在其中的值。

您可以使用各种方法创建 bytearray,包括传递表示字节值的整数可迭代对象、编码字符串或转换现有字节或 bytearray 对象。为此,我们使用 bytearray() 函数。

Bytearray 数据类型示例

在下面的示例中,我们通过传递表示字节值的整数可迭代对象来创建一个字节数组 -


# Creating a bytearray from an iterable of integers
value = bytearray([72, 101, 108, 108, 111]) 	
print(value) 	

获得的输出如下图所示 -

bytearray(b'Hello')

现在,我们通过使用“UTF-8”编码对字符串进行编码来创建一个字节数组 -


# Creating a bytearray by encoding a string
val = bytearray("Hello", 'utf-8') 	
print(val)	

产生的结果如下 -

bytearray(b'Hello')

(c) Python Memoryview 数据类型

在 Python 中,memoryview 是一个内置对象,它提供了原始对象的内存视图,通常是支持缓冲区协议的对象,例如字节数组 (bytearray) 和字节 (bytes)。它允许您访问原始对象的底层数据,而无需复制它,从而为大型数据集提供高效的内存访问。

您可以使用各种方法创建 memoryview。这些方法包括使用 memoryview() 构造函数、切片字节或 bytearray 对象、从数组对象中提取,或在读取文件时使用 open() 等内置函数。

Memoryview 数据类型的示例

在给定的示例中,我们通过将支持的对象传递给 memoryview() 构造函数来直接创建一个 memoryview 对象。支持的对象通常包括字节数组(bytearray)、字节(bytes)和其他支持缓冲协议的对象 -


data = bytearray(b'Hello, world!')
view = memoryview(data)
print(view)

以下是上述代码的输出 -

<memory at 0x00000186FFAA3580>

如果你有一个数组对象,你可以使用buffer接口创建一个memoryview,如下所示 -


import array
arr = array.array('i', [1, 2, 3, 4, 5])
view = memoryview(arr)
print(view)

获得的输出如下所示 -

<memory at 0x0000017963CD3580>

您还可以通过切片字节或字节数组对象来创建 memoryview -


data = b'Hello, world!'
# Creating a view of the last part of the data
view = memoryview(data[7:]) 	
print(view)

获得的结果如下 -

<memory at 0x00000200D9AA3580>

5. Python 字典数据类型

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

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


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

在 Python 中,dictionary 是内置 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 类中定义的相应功能执行添加、修改或删除操作。这些操作将在后续章节中进行解释。

6. Python 设置数据类型

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

集合中用逗号分隔的项目放在大括号或大括号 {} 内。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)、字符串或元组。如果您尝试将列表或字典放在设置的集合中,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'

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

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

设置示例


set1 = {123, 452, 5, 6}
set2 = {'Java', 'Python', 'JavaScript'}

print(set1)
print(set2)

这将生成以下输出 -

{123, 452, 5, 6}
{'Python', 'JavaScript', 'Java'}

7. Python 布尔数据类型

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

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


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

Boolean 数据类型的示例

下面是一个程序,它打印布尔变量 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

8. Python 无类型

Python 的 none 类型由“nonetype”表示。它是其自身数据类型的对象。nonetype 表示值的 null 类型或值的缺失。

None 类型的示例

在以下示例中,我们将 None 赋值给变量 x 并打印其类型,该类型将是 nonetyoe −


# Declaring a variable
# And, assigning a Null value (None)

x = None

# Printing its value and type
print("x = ", x)
print("type of x = ", type(x))

这将产生以下结果 -

x = None
type of x = <class 'NoneType'>

获取数据类型

要在 Python 中获取数据类型,您可以使用 type() 函数。type() 是一个内置函数,用于返回给定对象的类。

在以下示例中,我们获取了值和变量的类型 -


# Getting type of values
print(type(123))
print(type(9.99))

# Getting type of variables
a = 10
b = 2.12
c = "Hello"
d = (10, 20, 30)
e = [10, 20, 30]

print(type(a))
print(type(b))
print(type(c))
print(type(d))
print(type(e))

这将产生以下结果 -

<class 'int'>
<class 'float'>
<class 'int'>
<class 'float'>
<class 'str'>
<class 'tuple'>
<class 'list'>

设置数据类型

在 Python 中,在声明变量或对象时,无需设置数据类型。数据类型是根据分配的值自动设置的。

以下示例,演示如何根据给定值设置变量的数据类型 -


# Declaring a variable
# And, assigning an integer value

x = 10

# Printing its value and type
print("x = ", x)
print("type of x = ", type(x))

# Now, assigning string value to
# the same variable
x = "Hello World!"

# Printing its value and type
print("x = ", x)
print("type of x = ", type(x))

这将产生以下结果 -

x = 10
type of x = <class 'int'>
x = Hello World!
type of x = <class 'str'>

Python 数据类型转换

有时,您可能需要在内置数据类型之间执行转换。要在不同的 Python 数据类型之间转换数据,您只需将类型名称用作函数即可。

阅读:Python 类型转换

以下示例将不同的值分别转换为整数、浮点和字符串值 -


print("Conversion to integer data type")
a = int(1) 	 	 # a will be 1
b = int(2.2) 	 # b will be 2
c = int("3.3") 	 # c will be 3

print (a)
print (b)
print (c)

print("Conversion to floating point number")
a = float(1) 	 	 # a will be 1.0
b = float(2.2) 	 # b will be 2.2
c = float("3.3") # c will be 3.3

print (a)
print (b)
print (c)

print("Conversion to string")
a = str(1) 	 	 # a will be "1"	
b = str(2.2) 	 # b will be "2.2"
c = str("3.3") # c will be "3.3"

print (a)
print (b)
print (c)

这将产生以下结果 -

Conversion to integer data type
1
2
3
Conversion to floating point number
1.0
2.2
3.3
Conversion to string
1
2.2
3.3

数据类型转换函数

有几个内置函数可以执行从一种数据类型到另一种数据类型的转换。这些函数返回一个新对象,表示转换后的值。

功能 描述
int() 函数

将 x 转换为整数。base 如果 x 是字符串,则指定基数。

long() 函数

将 x 转换为长整数。base 如果 x 是字符串,则指定基数。此功能已弃用。

float() 函数

将 x 转换为浮点数。

complex() 函数

创建一个复数。

str() 函数

将对象 x 转换为字符串表示形式。

repr() 函数

将对象 x 转换为表达式字符串。

eval() 函数

计算一个字符串并返回一个对象。

tuple() 函数

将 s 转换为元组。

list() 函数

将 s 转换为列表。

set() 函数

将 s 转换为集合。

dict() 函数

创建字典。d 必须是 (key,value) 元组的序列。

frozenset() 函数

将 s 转换为冻结集。

chr() 函数

将整数转换为字符。

unichr() 函数

将整数转换为 Unicode 字符。

ord() 函数

将单个字符转换为其整数值。

hex() 函数

将整数转换为十六进制字符串。

oct() 函数

将整数转换为八进制字符串。