python 数据类型

/ 2021-05-21 / 71人浏览 / 0人评论

常见数据类型

在内存中存储的数据分为多中类型;比如,一个人的年龄可以用数字来存储,他的名字可以用字符来存储。 Python 定义了一些常用数据类型,用于存储各种类型的数据。

  • 整数类型:int - > 11
  • 浮点类型:float - > 11.23
  • 布尔类型:bool - > True , False
  • 字符串类型:str -> 'hello world'

整数类型

整数类型可以表示正数、负数和0,整数类型用int表示。 整数类型使用不同进制来表示数据,如下:

  • 十进制: 默认进制
  • 二进制:整数类型用0b开头表示二进制
  • 八进制:整数类型用0o开头表示八进制
  • 十六进制:整数类型用0x开头表示十六进制
# 整数类型
# 定义各种整数类型变量
#正数
n1 = 200
# 0
n2 = 0
# 负数
n3 = -200
# 二进制整数
n4 = 0b1010
# 八进制整数
n5 = 0o213
# 十六进制整数
n6 = 0x12a2
print(n1,type(n1))
print(n2,type(n2))
print(n3,type(n3))
print(n4,type(n4))
print(n5,type(n5))
print(n6,type(n6))

输出结果如下:

200 <class 'int'>
0 <class 'int'>
-200 <class 'int'>
10 <class 'int'>
139 <class 'int'>
4770 <class 'int'>

浮点型(float)

浮点型是由整数和小数部分组成,且浮点数存储数据存在不精确性;特别是使用浮点数进行计算时,小数位数容易出现不确定性。

# 浮点类型
f1 = 3.1415926
print('f1',f1,type(f1))
# 演示浮点类型数字计算不精确性
print('浮点计算',1.1+2.2)
print('浮点计算',1.1+2.1)

输出结果:

f1 3.1415926 <class 'float'>
浮点计算 3.3000000000000003
浮点计算 3.2

如何解决浮点型计算不精确的问题?

由于计算机存储是使用二进制存储,浮点型容易出现不精确的情况。怎么解决这个情况呢,通常我们是导入decimal模块。

# 解决浮点类型数字计算不精确性
from decimal import Decimal
print('Decimal浮点计算',Decimal('1.1')+Decimal('2.2'))
# 希望知道原因的大牛可以告知,是否依旧是二进制原因呢?
print('Decimal浮点计算依旧错误',Decimal(1.1)+Decimal(2.2))

输出结果如下:

Decimal浮点计算 3.3
Decimal浮点计算依旧错误 3.300000000000000266453525910

布尔类型(bool)

布尔类型是用来表示真或者假,类似二进制的0和1。所以java或者其他语言中,0表示假,其他数值可以表示真;同样的python也有同样的设定。 True 表示 真,可以用1表示 False 表示假,可以用0表示 与其他语言不一样的地方是,布尔类型是可以当成整数类型计算的。

# 布尔类型
f1 = True
f2 = False
# 输出类型
print('f1', type(f1))
print('f2', type(f2))
# 布尔类型用于计算
print('计算加法', f1 + 1)
print('计算减法', f2 - 1)
# 布尔类型计算后是什么类型
print('计算后类型', type(f1 + 1))
print('计算后类型', type(f1 - 1))

控制台输出:

f1 <class 'bool'>
f2 <class 'bool'>
计算加法 2
计算减法 -1
计算后类型 <class 'int'>
计算后类型 <class 'int'>

字符串类型

字符串是 Python 中最常用的数据类型。我们常用引号('或")来创建字符串。 Python 中不支持单字符类型,单字符在 Python 中也是作为一个字符串使用(不存在java中char在这种类型)。 字符串称之为不可变的字符序列(后面会细说)。 上面说了常用单引号或者双引号来创建字符串,这样创建出来的字符串必须要在一行,而通过三引号创建出来的字符串可以分布连续的多行(三引号通常是 ''' ''' 或者是""" """)。

# 字符串类型
s1 = '字符串1'
s2 = "字符串2"
# 多行字符串
s3 = '''字
符
串3'''

print('s1', s1, id(s1))
print('s2', s2, id(s2))
print('s3', s3, id(s3))

控制台输出

s1 字符串1 31856784
s2 字符串2 31856832
s3 字
符
串3 22805920

类型转换

类型转换是通过几个函数来进行转换处理,可以看下图,比较清晰的解释出集中数据类型的数据转换方法 举一个简单例子,说下字符串类型和整数类型放在一起处理会如何:

# 数据类型转换
name = '张三'
age = 20
print(type(name), type(age))
print('我叫'+name+',今年'+age+'岁')

输出结果如下:

<class 'str'> <class 'int'>
Traceback (most recent call last):
    print('我叫'+name+',今年'+age+'岁')
TypeError: can only concatenate str (not "int") to str

可以看到的是, 字符串类型和整数类型通过+拼接时报错了(这点和java不同,java字符串可以直接拼接整数类型组成新的字符串),需要将整数类型转换成字符串类型

print('我叫'+name+',今年'+str(age)+'岁')

全部评论