Python - 类型转换



Python 类型转换

从编程的角度来看,类型转换是指将一个类型的对象转换为另一个类型。在这里,我们将学习 Python 编程中的类型转换。

Python 类型转换是一个将一种数据类型的字面量转换为另一种数据类型的过程。Python 支持两种类型的转换——**隐式**和**显式**。

在 Python 中,有不同的数据类型,例如数字、序列、映射等。可能会有这种情况,你拥有某种类型的数据,但你想以另一种形式使用它。例如,用户输入了一个字符串,但你想将其用作数字。Python 的类型转换机制允许你这样做。

Python 隐式转换

当任何语言编译器/解释器自动将一种类型的对象转换为另一种类型时,这称为自动或**隐式转换**。Python 是一种强类型语言。它不允许在不相关的数据类型之间进行自动类型转换。例如,字符串不能转换为任何数字类型。但是,整数可以转换为浮点数。其他语言,如 JavaScript 是一种弱类型语言,其中整数会被强制转换为字符串以进行连接。

请注意,每种数据类型的内存需求不同。例如,Python 中的**整数**对象占用 4 个字节的内存,而**浮点数**对象由于其小数部分而需要 8 个字节。因此,Python 解释器不会自动将**浮点数**转换为**整数**,因为这会导致数据丢失。另一方面,通过将其小数部分设置为 0,可以轻松地将**整数**转换为**浮点数**。

当对**整数**和**浮点数**操作数进行任何算术运算时,会发生隐式**整数**到**浮点数**的转换。

假设我们有一个**整数**和一个**浮点数**变量

<<< a=10   # int object
<<< b=10.5 # float object

为了执行它们的加法,整数对象 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) #converts a float object to int
<<< a
10
<<< a = int(2*3.14) #expression results float, is converted to int
<<< 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 = ("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 组成,并且基数应为 2。

<<< a = int("110011", 2)
<<< a
51

二进制数 110011 的十进制等价值为 51。

八进制字符串转换为整数

字符串只能包含 0 到 7 的数字,并且基数应为 8。

<<< a = int("20", 8)
<<< a
16

八进制数 20 的十进制等价值为 16。

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

字符串只能包含十六进制符号,即 0-9 和 A、B、C、D、E 或 F。基数应为 16。

<<< a = int("2A9", 16)
<<< a
681

十六进制数 2A9 的十进制等价值为 681。您可以使用 Windows、Ubuntu 或智能手机中的计算器应用程序轻松验证这些转换。

以下是如何将数字、浮点数和字符串转换为整数数据类型的示例

a = int(1)     # a will be 1
b = int(2.2)   # b will be 2
c = int("3")   # c will be 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)     # 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)

这将产生以下结果:

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'。列表和元组对象也可以作为参数传递给 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)     # 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)

这将产生以下结果:

1
2.2
3.3

序列类型的转换

列表、元组和字符串是 Python 的序列类型。它们是有序或索引的项目集合。

可以使用list() 函数将字符串和元组转换为列表对象。类似地,tuple() 函数将字符串或列表转换为元组。

我们将采用这三种序列类型的每个对象,并研究它们的相互转换。

<<< a=[1,2,3,4,5]   # List Object
<<< b=(1,2,3,4,5)   # Tupple Object
<<< c="Hello"       # String Object

### list() separates each character in the string and builds the list
<<< obj=list(c)
<<< obj
['H', 'e', 'l', 'l', 'o']

### The parentheses of tuple are replaced by square brackets
<<< obj=list(b)
<<< obj
[1, 2, 3, 4, 5]

### tuple() separates each character from string and builds a tuple of characters
<<< obj=tuple(c)
<<< obj
('H', 'e', 'l', 'l', 'o')

### square brackets of list are replaced by parentheses.
<<< obj=tuple(a)
<<< obj
(1, 2, 3, 4, 5)

### str() function puts the list and tuple inside the quote symbols.
<<< 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 指定基数。

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 必须是 (键,值) 元组的序列。

12 Python frozenset() 函数

将 s 转换为冻结集。

13 Python chr() 函数

将整数转换为字符。

14 Python unichr() 函数

将整数转换为 Unicode 字符。

15 Python ord() 函数

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

16 Python hex() 函数

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

17 Python oct() 函数

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

广告