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
在隐式类型转换中,字节大小较小的对象会被提升到与操作中其他对象的字节大小相匹配。例如,在与浮点对象相加之前,一个布尔对象首先被提升为int,然后再提升为float。在以下示例中,我们尝试将一个布尔对象添加到一个浮点数中。
>>> a=True
>>> b=10.5
>>> c=a+b
>>> print (c)
11.5
请注意,True等于1,False等于0。
尽管自动或隐式转换仅限于int到float的转换,但您可以使用Python的内置函数执行显式转换,例如字符串到整数的转换。
int()函数
Python的内置int()函数将整数文字转换为整数对象,将浮点数转换为整数,并将字符串转换为整数(如果字符串本身具有有效的整数文字表示)。
使用int()作为int对象的参数等同于直接声明一个整数对象。
>>> a = int(10)
>>> a
10
是和 − 一样的
>>> a = 10
>>> a
10
>>> type(a)
<class 'int>
如果int()函数的参数是一个float对象或浮点表达式,则返回一个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或智能手机上的计算器应用程序轻松验证这些转换。
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()函数从一个字符串中返回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'>
str()函数
我们看到Python如何从相应的字符串表示中获取整型或浮点型数值。str()函数则是相反的操作。它会将一个整型或浮点型对象用引号(’)括起来,返回一个str对象。str()函数返回字符串的表示形式。
在本节中,我们将看到Python中str()函数的不同示例。
str()函数有三个参数。第一个必需的参数(或参数)是我们想要的对象的字符串表示形式。其他两个运算符,即编码和错误,是可选的。
我们将在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}'
序列类型的转换
列表、元组和字符串是Python的序列类型。它们是有序的或索引的项目集合。
使用 list() 函数可以将字符串和元组转换为列表对象。同样地, tuple() 函数将字符串或列表转换为元组。
我们将分别使用这三种序列类型的对象并研究它们之间的相互转换。
>>> a=[1,2,3,4,5]
>>> b=(1,2,3,4,5)
>>> c="Hello"
### 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的显式类型转换功能允许使用其内置函数将一个数据类型转换为其他数据类型。