从编程的角度来看,类型转换指的是将一个对象从一种类型转换成另一种类型。在这里,我们将学习 Python 编程中的类型转换。
Python 类型转换是一个过程,其中我们将一种数据类型的文字转换为另一种数据类型。Python 支持两种类型的转换——隐式和显式。
Python 隐式类型转换
当任何语言编译器/解释器自动将一个类型的对象转换为另一个类型时,这被称为自动或隐式转换。Python 是一种强类型语言。它不允许无关数据类型之间的自动类型转换。例如,一个字符串不能被转换为任何数字类型。然而,整数可以转换为浮点数。其他语言如 JavaScript 是一种弱类型语言,在那里整数会被强制转换为字符串以进行连接。
请注意,每种数据类型的内存需求是不同的。例如,Python 中的整数对象占用 4 字节的内存,而浮点对象由于其小数部分需要 8 字节。因此,Python 解释器不会自动将浮点数转换为整数,因为这会导致数据丢失。另一方面,整数可以很容易地通过将其小数部分设置为 0 来转换为浮点数。
当整数和浮点数操作数进行任何算术操作时,隐式的整数到浮点数转换会发生。
假设我们有一个整数变量和一个浮点数变量:
>>> a = 10
>>> b = 10.5
为了执行它们的加法,整数对象 10 被升级为 10.0,这是一个浮点数,但其数值与之前的相同。现在我们可以对两个浮点数执行加法。
>>> c = a + b
>>> print(c)
20.5
在隐式类型转换中,较小字节数大小的 Python 对象被升级以匹配操作中较大字节数大小的对象。例如,在与浮点对象相加之前,布尔对象首先被升级为整数然后转为浮点数。在下面的例子中,我们试图将一个布尔对象加到一个浮点数上,请注意 True 等于 1,而 False 等于 0。
a = True
b = 10.5
c = a + b
print(c)
这将产生如下结果:
11.5
Python 显式类型转换
虽然自动或隐式转换仅限于整数到浮点数的转换,你可以使用 Python 的内置函数 int()
, float()
和 str()
来执行显式转换,例如字符串到整数的转换。
Python int()
函数
Python 的内置 int()
函数将整数文字转换为整数对象,将浮点数转换为整数,并将字符串转换为整数,前提是该字符串具有有效的整数表示形式。
使用 int()
函数与整数对象作为参数相当于直接声明一个整数对象。
>>> a = int(10)
>>> a
10
这是等同于:
>>> a = 10
>>> a
10
>>> type(a)
<class 'int'>
如果 int()
函数的参数是一个浮点对象或浮点表达式,它将返回一个整数对象。例如:
>>> a = int(10.5)
>>> a
10
>>> a = int(2 * 3.14)
>>> a
6
>>> type(a)
<class 'int'>
int()
函数还将在给定布尔对象作为参数时返回整数 1。
>>> a = int(True)
>>> a
1
>>> type(a)
<class 'int'>
字符串到整数
int()
函数仅在字符串对象包含有效整数表示的情况下才返回整数。
>>> a = int("100")
>>> a
100
>>> type(a)
<class 'int'>
>>> a = int("10" + "01")
>>> a
1001
>>> type(a)
<class 'int'>
然而,如果字符串包含非整数表示,Python 会引发 ValueError。
>>> a = int("10.5")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '10.5'
>>> a = int("Hello World")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'Hello World'
int()
函数也可以从二进制、八进制和十六进制字符串返回整数。为此,函数需要一个 base 参数,必须是 2、8 或 16。字符串应该具有有效的二进制/八进制/十六进制表示。
二进制字符串到整数
字符串应仅由 1 和 0 组成,且 base 应为 2。
>>> a = int("110011", 2)
>>> a
51
十进制等价于二进制数 110011 是 51。
八进制字符串到整数
字符串应仅包含 0 到 7 的数字,且 base 应为 8。
>>> a = int("20", 8)
>>> a
16
八进制 20 的十进制等价是 16。
十六进制字符串到整数
字符串应仅包含十六进制符号,即 0-9 和 A, B, C, D, E 或 F。Base 应为 16。
>>> a = int("2A9", 16)
>>> a
681
十六进制 2A9 的十进制等价是 681。
以下是将数字、浮点数和字符串转换为整数数据类型的示例:
a = int(1)
b = int(2.2)
c = int("3")
print(a)
print(b)
print(c)
这将产生如下结果:
1
2
3
Python float()
函数
float()
是 Python 中的一个内置函数。如果参数是一个浮点文字、整数或具有有效浮点表示的字符串,它将返回一个浮点对象。
使用 float()
函数与浮点对象作为参数等同于直接声明一个浮点对象。
>>> a = float(9.99)
>>> a
9.99
>>> type(a)
<class 'float'>
这是等同于:
>>> a = 9.99
>>> a
9.99
>>> type(a)
<class 'float'>
如果 float()
函数的参数是一个整数,返回的值将是一个带有小数部分设置为 0 的浮点数。
>>> a = float(100)
>>> a
100.0
>>> type(a)
<class 'float'>
float()
函数从字符串返回浮点对象,前提是字符串包含一个有效的浮点数,否则将引发 ValueError。
>>> a = float("9.99")
>>> a
9.99
>>> type(a)
<class 'float'>
>>> a = float("1,234.50")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: '1,234.50'
这里 ValueError 的原因是字符串中存在逗号。
为了字符串到浮点数的转换目的,科学计数法的浮点表示也被认为是有效的。
>>> a = float("1.00E4")
>>> a
10000.0
>>> type(a)
<class 'float'>
>>> a = float("1.00E-4")
>>> a
0.0001
>>> type(a)
<class 'float'>
以下是将数字、浮点数和字符串转换为浮点数据类型的示例:
a = float(1)
b = float(2.2)
c = float("3.3")
print(a)
print(b)
print(c)
这将产生如下结果:
1.0
2.2
3.3
Python str()
函数
我们已经看到 Python 如何从相应的字符串表示中获得整数或浮点数。str()
函数的作用正好相反。它将整数或浮点数对象包围在引号(')中,返回一个 str
对象。str()
函数返回任何 Python 对象的字符串表示形式。在本节中,我们将查看 str()
函数的不同例子。
str()
函数有三个参数。第一个必需的参数(或参数)是我们想要其字符串表示的对象。其他两个操作符,encoding 和 errors,是可选的。
我们将执行 str()
函数在 Python 控制台中轻松验证返回的对象是一个字符串,并带有包围的引号(')。
整数到字符串
您可以将任何整数转换为字符串如下:
>>> a = str(10)
>>> a
'10'
>>> type(a)
<class 'str'>
浮点数到字符串
str()
函数将浮点对象转换为字符串对象,无论是标准表示法还是科学记数法。
>>> a = str(11.10)
>>> a
'11.1'
>>> type(a)
<class 'str'>
>>> a = str(2 / 5)
>>> a
'0.4'
>>> type(a)
<class 'str'>
在第二种情况下,一个除法表达式被作为参数传递给 str()
函数。请注意,表达式首先被求值,然后结果被转换为字符串。
使用 E 或 e 和正负指数的科学记数法浮点数被 str()
函数转换为字符串。
>>> a = str(10E4)
>>> a
'100000.0'
>>> type(a)
<class 'str'>
>>> a = str(1.23e-4)
>>> a
'0.000123'
>>> type(a)
<class 'str'>
当布尔常量作为参数输入时,它被包围在引号(')中,使得 True 变为 'True'。列表和元组对象也可以作为 str()
函数的参数。结果字符串是被引号包围的列表/元组。
>>> a = str(True)
>>> a
'True'
>>> a = str([1, 2, 3])
>>> a
'[1, 2, 3]'
>>> a = str((1, 2, 3))
>>> a
'(1, 2, 3)'
>>> a = str({1: 100, 2: 200, 3: 300})
>>> a
'{1: 100, 2: 200, 3: 300}'
以下是将数字、浮点数和字符串转换为字符串数据类型的示例:
a = str(1)
b = str(2.2)
c = str("3.3")
print(a)
print(b)
print(c)
这将产生如下结果:
1
2.2
3.3
序列类型的转换
列表(List)、元组(Tuple)和字符串(String)是 Python 的序列类型。它们都是有序的或索引化的项目集合。
一个字符串或元组可以通过使用 list()
函数转换为列表对象。类似地,tuple()
函数可以将字符串或列表转换为元组。
我们将取这三个序列类型中的每一个对象并研究它们之间的相互转换。
>>> a = [1, 2, 3, 4, 5]
>>> b = (1, 2, 3, 4, 5)
>>> c = "Hello"
>>> obj = list(c)
>>> obj
['H', 'e', 'l', 'l', 'o']
>>> obj = list(b)
>>> obj
[1, 2, 3, 4, 5]
>>> obj = tuple(c)
>>> obj
('H', 'e', 'l', 'l', 'o')
>>> obj = tuple(a)
>>> obj
(1, 2, 3, 4, 5)
>>> obj = str(a)
>>> obj
'[1, 2, 3, 4, 5]'
>>> obj = str(b)
>>> obj
'(1, 2, 3, 4, 5)'
因此,Python 的显式类型转换功能允许使用其内置函数将一种数据类型转换为另一种。
数据类型转换函数
有许多内置函数用于执行从一种数据类型到另一种的数据转换。这些函数返回一个新的表示转换后值的对象。
序号 |
函数名 |
描述 |
1 |
Python int() 函数 |
将 x 转换为整数。如果 x 是字符串,则 base 指定基数。 |
2 |
Python long() 函数 |
将 x 转换为长整数。如果 x 是字符串,则 base 指定基数。(Python 3 中已移除) |
3 |
Python float() 函数 |
将 x 转换为浮点数。 |
4 |
Python complex() 函数 |
创建复数。 |
5 |
Python str() 函数 |
将对象 x 转换为字符串表示形式。 |
6 |
Python repr() 函数 |
将对象 x 转换为表达式字符串。 |
7 |
Python eval() 函数 |
评估一个字符串并返回一个对象。 |
8 |
Python tuple() 函数 |
将 s 转换为元组。 |
9 |
Python list() 函数 |
将 s 转换为列表。 |
10 |
Python set() 函数 |
将 s 转换为集合。 |
11 |
Python dict() 函数 |
创建字典。d 必须是一系列 (key,value) 元组。 |
12 |
Python frozenset() 函数 |
将 s 转换为冻结集合。 |
13 |
Python chr() 函数 |
将整数转换为字符。 |
14 |
Python unichr() 函数 |
将整数转换为 Unicode 字符。(Python 3 中已被 chr() 替代) |
15 |
Python ord() 函数 |
将单个字符转换为其整数值。 |
16 |
Python hex() 函数 |
将整数转换为十六进制字符串。 |
17 |
Python oct() 函数 |
将整数转换为八进制字符串。 |