数据类型
计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。
获取数据类型,type()
内置函数
>>> type(118)
<class 'int'>
>>> type('118')
<class 'str'>
或者instance()
函数判断数据类型
>>> isinstance(118, int)
True
>>> isinstance('118', str)
True
在Python中,能够直接处理的数据类型有以下几种:
整型
Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。
10进制:默认进制,0-9组成
2进制:0b前缀,0,1组成
8进制:0o前缀,0-7组成
16进制:0x前缀,0-9,a-f组成
>>> print(118)
118
>>> print(0b1110110)
118
>>> print(0o166)
118
>>> print(0x76)
118
使用内置函数bin()
/oct()
/hex()
将十进制数转化为2/8/16进制数
>>> bin(118)
'0b1110110'
>>>
>>> oct(118) ##在python2中,o会被省略,算是个很大的区别
'0o166'
>>>
>>> hex(118)
'0x76'
内置函数int()
创建整数,也可以把数字的字符串转化为整型
>>> int()
0
>>> int(118)
118
>>> int('118')
118
>>> int(118.2)
118
>>> int('asd')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'asd'
>>> int('118.2')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '118.2'
>>> int('0b1110110', 2) ##第一个参数必须是字符串类型
118
>>> int('0o166', 8)
118
>>> int('0x76', 16)
118
在python2中,8进制的前缀0o中的o会被省略,但是在python3中,必须严格写上,否则会报错
#python2
>>> int(066)
54
#python3
>>> int(066)
File "<stdin>", line 1
int(066)
^
SyntaxError: invalid token
>>> int(0o66)
54
负整型就在前面加上“-”号就行了,例如:
>>> print(-0b1110110)
-118
>>> bin(-118)
'-0b1110110'
浮点型
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x10^9和12.3x10^8是完全相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x10^9就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。
float()
内置函数创建浮点数,不传递参数时,返回浮点数0.0;
>>> float()
0.0
>>> float(1)
1.0
>>> float(1.5)
1.5
>>> float('1.5')
1.5
>>>
print(2.3e8)
230000000.0
>>> print(2.3e-4)
0.00023
浮点数存储的不精确性,整数和浮点数在计算机内部存储的方式是不同的,浮点数在计算机中使用二进制存储,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
>>> print(1.1 + 2.2 - 3.3)
4.440892098500626e-16
>>> print(1.1 +2.2)
3.3000000000000003
精确计算浮点数,使用decimal(小数)
模块或者fractions(分数)
模块,可应用于金额等精确计算的场景
>>> import decimal
>>> print(decimal.Decimal('1.1') + decimal.Decimal('2.2') - decimal.Decimal('3.3')) ##注意传递的参数时字符串类型
0.0
>>> import fractions
>>> print(fractions.Decimal('1.1') + fractions.Decimal('2.2') - fractions.Decimal('3.3')) ##注意传递的参数时字符串类型
0.0
>>> print(fractions.Fraction(11, 10) + fractions.Fraction(22, 10) - fractions.Fraction(33, 10)) ##fractions.Fraction(11, 10) == 11/10
0
字符串
字符串是以单引号’或双引号”括起来的任意文本,比如’abc’,”xyz”等等。
请注意,’’或””本身只是一种表示方式,不是字符串的一部分,因此,字符串’abc’只有a,b,c这3个字符。如果’本身也是一个字符,那就可以用””括起来,比如”I’m OK”包含的字符是I,’,m,空格,O,K这6个字符。
>>> print("I'm OK")
I'm OK
原样字符串
>>> print(r"I'm \t ok")
I'm \t ok
>>> print("I'm \t ok")
I'm ok
布尔型
只有两个取值。True 或者 False (python关键字,首字符大写);
True的值为1
False的值为0
>>> True == 1
True
>>> False == 0
True
>>> print(True + 1)
2
>>> print(False + 1)
1
布尔值可以进行逻辑运算(and、or、not)
>>> True and False
False
>>> True or False
True
>>>
>>> True or False
True
>>> not True
False
以下对象的布尔值为False:
False、数值0、None、空字符串、空列表、空元组、空字典、空集合。
>>> for x in [False, 0, None, '', [], (), {}, set()]:
... print('%5s 的布尔值为:%s' %(x, bool(x)))
...
False 的布尔值为:False
0 的布尔值为:False
None 的布尔值为:False
的布尔值为:False ##这里是空字符串
[] 的布尔值为:False
() 的布尔值为:False
{} 的布尔值为:False
set() 的布尔值为:False
除了以上的类型,其他都为True。
所有对象都可被直接用作布尔值,解释器会自动调用内置函数bool()进行转换
None
用于表示数据值的不存在,是实实在在的对象,占用内存空间,并不意味着空或者未定义,None是something而不是nothing
>>> id(None)
139944117241744
使用场景,对象None经常用于变量的初始化,或者将变量重置为“数据值不存在”的状态
>>> a = None
>>> print(a)
None
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 289211569@qq.com