Python中的类型转换详解
目录
1.隐式类型转换
2.显式类型转换
3.显式类型转换要点
1.隐式类型转换
Python的变量不是固定的,那么它会根据变量当前值在运行时决定的,可以通过内置函数type(变量)来查看其类型,这种方式就是隐式转换,也称为自动转换。
具体代码实现如下:
var1 = 10
var2 = 1.3
var3 = "你好"
print(type(var1))
print(type(var2))
print(type(var3))
#运行结果如下
<class 'int'>
<class 'float'>
<class 'str'>
从以上的代码可以看出,var1的变量当前值为整形,var2变量当前值为浮点类型,var3变量当前值为字符串类型,所以转换出来的输出也是相应的类型。
隐式转换时,在运算时,数据类型会向高精度自动转换,代码如下
var4 = 10
var5 = 1.2
var6 = var4 +var5 #11.2 float
print("var6=","var6,var6的类型:",type(var6)) #11.2 float
#运行结果如下:
var6= var6,var6的类型: <class 'float'>
这串代码就说明了问题,将整型的数据,转换成Var6浮点数了,为什么会出现这种情况呢,因为var6的精度更高。
2.显式类型转换
1如果需要对变量数据类型进行转换,只需要对将数据类型作为函数名即可,这种方式就是显式转换,或者说叫强制转换
在下面的内置函数中可以完成数据类型之间的转换,函数会返回一个新的对象/值,就是强制转换的结果。
函数 | 描述 |
---|---|
int(x[,base]) | 将x转换为一个整数 |
float(x) | 将x转换到一个浮点数 |
complex(real[,imag]) | 创建一个复数 |
str(x) | 将对象x转换为字符串 |
repr(x) | 将对象x转换为表达式字符串 |
eval(str) | 用来计算在字符串中的有效python表达式,并返回一个对象 |
tuple(s) | 将序列s转换为一个元组 |
list(s) | 将序列s转换为一个列表 |
显式转换代码
i = 10
j = float(i)
print("j的类型:",type(j),"j =",j)
#运行结果:
j的类型: <class 'float'> j = 10.0
这个就是将整型转换成浮点型,
- 这里使用了
float(i)
,这是一个显式类型转换操作。它的作用是将i
的值从整数转换为浮点数。 -
即使
i
的值是一个整数(如10
),float(i)
也会将其转换为浮点数形式(如10.0
)。 -
浮点数的特性:
-
浮点数是 Python 中的一种数据类型,用于表示带小数点的数。
-
即使一个浮点数没有小数部分(如
10.0
),它仍然是浮点数类型,而不是整数类型。 -
type()
函数的作用: -
type(j)
返回的是变量j
的类型。由于j
是通过float(i)
转换得到的,所以它的类型是float。
3.显示类型转换要点:
不管什么样的整型int,float都可以转换成str,tr(x)将对象x转换为字符串。
代码实现如下:
n1 = 100
n2 = 234.98
print(str(n1))
print(str(n2))
#运行结果:
100
234.98
看到这串代码会有一个误区,这输出的还是整型和浮点数啊,没有转换成字符串类型,为什么会出现这个误区呢,那是因为当你使用 str()
函数将数字转换为字符串时,字符串的内容是数字的文本表示形式。print()
函数会将字符串的内容原样输出,不会添加额外的引号或其他标记。
因此,当你打印字符串串 "100"
和 "234.98"
时,输出结果是:
100
234.98
下面为了验证这个结论是正确的,继续看以下代码:
n1 = 100
n2 = 234.98
s1 = str(n1)
s2 = str(n2)
print("s1 的类型:", type(s1), "s1 =", s1)
print("s2 的类型:", type(s2), "s2 =", s2)
#运行结果如下:
s1 的类型: <class 'str'> s1 = 100
s2 的类型: <class 'str'> s2 = 234.98
由此可见,转换完成的类型就是字符串类型,而不是看到的整型和浮点类型。
4.变量的强制转换不会改变原变量数据类型
对一个变量进行强制转换,会返回一个数据/值,强制转换后,并不会影响原变量的数据类型,也就是说不影响原变量指向的数据/值的数据类型,如下图1所示
图1
代码实现如下:
a = 10
print("a的类型:",type(a),"a的值:",a)
b = float(a)
print("b的类型:",type(b),"b的值:",b)
c = str(a)
print("c的类型:",type(c),"c的值:",c)
#运行结果:
a的类型: <class 'int'> a的值: 10
b的类型: <class 'float'> b的值: 10.0
c的类型: <class 'str'> c的值: 10
结合代码和图片,由此看来,强制转换之后,并没有改变原变量的数据类型。
作者:追梦撩编程