Python - 类型转换
Python 类型转换
从编程角度来看,type casting 指的是将一种类型对象转换为另一种类型。这里,我们将学习 Python 编程中的类型转换。
Python 类型转换是将一种数据类型的字面量转换为另一种数据类型的过程。Python 支持两种类型的转换 — 隐式 和 显式。
Python 中有不同的数据类型,例如数字、序列、映射等。可能存在这样的情况:你拥有一种类型的数据,但希望以另一种形式使用它。例如,用户输入了一个字符串,但你想将其用作数字。Python 的类型转换机制让你能够做到这一点。
Python 隐式转换
当语言编译器/解释器自动将一种类型对象转换为另一种类型时,称为自动或 隐式转换。Python 是一种强类型语言。它不允许在不相关的数据类型之间进行自动类型转换。例如,字符串不能转换为任何数字类型。但是,integer 可以转换为 float。其他语言如 JavaScript 是弱类型语言,其中 integer 在连接操作时会被强制转换为字符串。
注意,每种数据类型的内存需求不同。例如,Python 中的 integer 对象占用 4 字节内存,而 float 对象需要 8 字节,因为它有小数部分。因此,Python 解释器不会自动将 float 转换为 int,因为这会导致数据丢失。另一方面,int 可以轻松转换为 float,只需将其小数部分设为 0。
当对 int 和 float 操作数执行任何算术运算时,会发生隐式的 int 到 float 转换。
假设我们有一个 int 变量和一个 float 变量
<<< a=10 # int 对象 <<< b=10.5 # float 对象
为了执行它们的加法,10 — 这个 integer 对象会被升级为 10.0。它是一个 float,但与之前数值等价。现在我们可以对两个 float 执行加法。
<<< c=a+b <<< print (c) 20.5
在隐式类型转换中,字节大小较小的 Python 对象会被升级以匹配操作中另一个对象更大的字节大小。例如,Boolean 对象首先升级为 int,然后升级为 float,然后再与浮点对象相加。在以下示例中,我们尝试将 Boolean 对象加到一个 float 中,请注意 True 等于 1,False 等于 0。
a=True; b=10.5; c=a+b; print (c);
这将产生以下结果:
11.5
Python 显式转换
尽管自动或隐式转换仅限于 int 到 float 的转换,你可以使用 Python 的内置函数 int()、float() 和 str() 来执行显式转换,例如将字符串转换为整数。
Python int() 函数
Python 内置的 int() 函数将整数字面量转换为整数对象,将浮点数转换为整数,以及将具有有效整数字面量表示的字符串转换为整数。
使用 int() 函数并传入整数对象作为参数,相当于直接声明一个 int 对象。
<<< a = int(10) <<< a 10
与以下代码相同 −
<<< a = 10 <<< a 10 <<< type(a) <class 'int>
如果 int() 函数的参数是浮点数对象或浮点表达式,它会返回一个 int 对象。例如 −
<<< a = int(10.5) #将浮点数对象转换为 int <<< a 10 <<< a = int(2*3.14) #表达式结果为浮点数,被转换为 int <<< a 6 <<< type(a) <class 'int'>
如果传入 Boolean 对象作为参数,int() 函数也会返回整数 1。
<<< a=int(True) <<< a 1 <<< type(a) <class 'int'>
字符串转整数
只有当字符串包含有效的整数表示时,int() 函数才会从字符串对象返回整数。
<<< a = int("100")
<<< a
100
<<< type(a)
<class 'int'>
<<< a = ("10"+"01")
<<< 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。您可以使用 Windows、Ubuntu 或智能手机上的计算器应用轻松验证这些转换。
以下是将数字、浮点数和字符串转换为整数数据类型的示例:
a = int(1) # a 将为 1
b = int(2.2) # b 将为 2
c = int("3") # c 将为 3
print (a)
print (b)
print (c)
这将产生以下结果 −
1 2 3
Python float() 函数
float() 是 Python 中的内置函数。如果参数是浮点字面量、整数或具有有效浮点表示的字符串,它会返回一个 float 对象。
使用 float() 并以 float 对象作为参数,相当于直接声明一个 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() 函数可以从字符串返回 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'>
以下是将数字、浮点数和字符串转换为 float 数据类型的示例:
a = float(1) # a 将为 1.0
b = float(2.2) # b 将为 2.2
c = float("3.3") # c 将为 3.3
print (a)
print (b)
print (c)
这会产生以下结果 −
1.0 2.2 3.3
Python str() 函数
我们已经看到 Python 如何从对应的字符串表示形式获取整数或浮点数。str() 函数的作用相反。它用引号 (') 包围整数或浮点对象,返回一个 str 对象。str() 函数返回任何 Python 对象的字符串表示。在本节中,我们将看到 Python 中 str() 函数的不同示例。
str() 函数有三个参数。第一个必需参数(或实参)是我们想要获取字符串表示的对象。另外两个参数,encoding 和 errors,是可选的。
我们将在 Python 控制台中执行 str() 函数,以轻松验证返回的对象是字符串,并带有包围的引号 (')。
整数转字符串
您可以按以下方式将任何整数转换为字符串:
<<< 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'。List 和 Tuple 对象也可以作为 str() 函数的实参。结果字符串是将 list/tuple 用 (') 包围。
<<< 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) # a 将是 "1"
b = str(2.2) # b 将是 "2.2"
c = str("3.3") # c 将是 "3.3"
print (a)
print (b)
print (c)
这会产生以下结果 −
1 2.2 3.3
序列类型的转换
List、Tuple 和 String 是 Python 的序列类型。它们是有序的或可索引的项集合。
可以使用 list() 函数将字符串和 tuple 转换为 list 对象。同样,tuple() 函数可以将字符串或 list 转换为 tuple。
我们将取这三种序列类型各一个对象,并研究它们的相互转换。
<<< a=[1,2,3,4,5] # List 对象
<<< b=(1,2,3,4,5) # Tuple 对象
<<< c="Hello" # String 对象
### list() 将字符串中的每个字符分离并构建 list
<<< obj=list(c)
<<< obj
['H', 'e', 'l', 'l', 'o']
### tuple 的圆括号被替换为方括号
<<< obj=list(b)
<<< obj
[1, 2, 3, 4, 5]
### tuple() 将字符串中的每个字符分离并构建字符的 tuple
<<< obj=tuple(c)
<<< obj
('H', 'e', 'l', 'l', 'o')
### list 的方括号被替换为圆括号
<<< obj=tuple(a)
<<< obj
(1, 2, 3, 4, 5)
### str() 函数将 list 和 tuple 放入引号符号中
<<< obj=str(a)
<<< obj
'[1, 2, 3, 4, 5]'
<<< obj=str(b)
<<< obj
'(1, 2, 3, 4, 5)'
因此,Python 的显式类型转换特性允许通过内置函数将一种数据类型转换为另一种。
数据类型转换函数
有几个内置函数可以执行从一种数据类型到另一种数据类型的转换。这些函数返回代表转换值的新的对象。
| 序号 | 函数及描述 |
|---|---|
| 1 | Python int() function
将 x 转换为整数。如果 x 是字符串,base 指定进制。 |
| 2 | Python long() function
将 x 转换为长整数。如果 x 是字符串,base 指定进制。 |
| 3 | Python float() function
将 x 转换为浮点数。 |
| 4 | Python complex() function
创建一个复数。 |
| 5 | Python str() function
将对象 x 转换为字符串表示。 |
| 6 | Python repr() function
将对象 x 转换为表达式字符串。 |
| 7 | Python eval() function
求值字符串并返回一个对象。 |
| 8 | Python tuple() function
将 s 转换为 tuple。 |
| 9 | Python list() function
将 s 转换为 list。 |
| 10 | Python set() function
将 s 转换为 set。 |
| 11 | Python dict() function
创建一个 dictionary。d 必须是 (key,value) 元组的序列。 |
| 12 | Python frozenset() function
将 s 转换为 frozen set。 |
| 13 | Python chr() function
将整数转换为字符。 |
| 14 | Python unichr() function
将整数转换为 Unicode 字符。 |
| 15 | Python ord() function
将单个字符转换为其整数值。 |
| 16 | Python hex() function
将整数转换为十六进制字符串。 |
| 17 | Python oct() function
将整数转换为八进制字符串。 |