Python中主要的数据类型有:数字、字符串、列表、元组、字典、文件等。下面对数字进行介绍和总结
数字
1. 基本概念
Python是面向对象的语言,数字也是对象,它是不可变的。当给变量重新赋值时,是将变量指向了另一个对象,原来的对象并没有被改变。这一点与c有很大的区别。
2. 数字的类型
Python支持多种数字类型:整型、长整型、浮点型、复数、布尔型、十进制浮点型
整型int
如:711 -19 017 0x18
Python中的整型等价于C中的长整型,在32位计算机中占用4个字节。取值范围是-2^31~ 2^31-1
长整型long
如:16384L -0x4E8L 017L -2147483648l 052144364L
长整型一般以L结尾,表示其为长整型。取值范围只与机器的内存有关,可以表示无限大的数,远远超过了c的长整型
目前,整型与长整型在慢慢统一,当整型数据范围溢出时,会自动转换为长整型
浮点型float
如:0.0 -29.2 98e3*1.0 -238. -1.28E-9
Python中的浮点型数据类似与C中的双精度浮点型double,可以用十进制或科学计数法表示。
十进制浮点型decimal
由于计算机的精度问题,导致小数的表示存在误差,如0.1在计算机中的表示是0.1000000000000001。0.1+0.1+0.1-0.3应该是0.结果却不是。
>>> 0.1+0.1+0.1-0.3
5.551115123125783e-17
为此引入Decimal类型的小数进行解决。
>>> from decimal import Decimal
>>> printDecimal('0.1')+Decimal('0.1')+Decimal('0.1')-Decimal('0.3')
0.0
Decimal是一个类,使用时需进行导入,然后通过字符串创建decimal对象。注意decimal类型的数据不可以和普通浮点数进行运算。Decimal类型的数据支持算术运算,不支持位运算等。
>>> 1+Decimal('1.0')
Decimal('2.0')
>>> 1.0+Decimal('2.0')
Traceback (most recent call last):
File"
1.0+Decimal('2.0')
TypeError: unsupported operand type(s) for +: 'float'and 'Decimal'
>>> a = Decimal('1.2')
>>> b = Decimal('3.0')
>>> print a-b
-1.8
>>> print a+b
4.2
>>> print a*b
3.60
>>> print a/b
0.4
>>> print a % b
1.2
>>> print a**2
1.44
>>> print a&b
Traceback (most recent call last):
File"
printa&b
TypeError: unsupported operand type(s) for &:'Decimal' and 'Decimal'
复数complex
如 2+3j -1-j 0+2J
Python支持复数类型,复数由实部和虚部组成,实部和虚部都是实数,虚部不能单独存在,虚部后缀j或J
复数对象有内建属性实部和虚部,conjugte方法获取其共轭复数。例:
>>> com = -12.3+8.3j
>>> com
(-12.3+8.3j)
>>> com.real
-12.3
>>> com.imag
8.3
>>> com.conjugate
>>> com.conjugate()
(-12.3-8.3j)
布尔型bool
布尔型只有两个值True和False,分别表示1和0,它们是整型的子类。值为0的任何数字和空集(空列表、空元组等)的布尔值为0。没有__nonzero()__方法的类的对象默认值是True.下面是一些例子:
#不同类型数据的bool值
>>> bool(1)
True
>>> bool(True)
True
>>> bool(0)
False
>>> bool([])
False
#bool值的使用
>>> foo = 1<2
>>> foo
True
>>> foo + 100
101
>>> foo
True
>>> int(foo)
1
#关于__nonzero()__方法
>>> class C:pass
>>> c = C()
>>> bool(c)
True
>>> bool(C)
True
#重写__nonzero()__
>>> class C:
def__nonzero__(self):
return False
>>> c = C()
>>> bool(c)
False
>>> bool(C)
True
3. 数字的运算
3.1 算术运算
不同类型的数字之间可以进行算术运算,如整型和实型可以进行加法除法等,当运算符两端的操作数类型不同时,python会自动对类型进行强制转换,基本原则是:整数转换为浮点数, 非复数转换为复数。
Python中有单目运算符+(正号)、-(负号)。双目运算符:+、 - 、 *、 /、 %、**、//,分别表示加、减、乘、除法、取余、求幂、整除。这里主要对除法和幂运算进行说明。
除法:
/:表示整除,如3/2=1,会将小数部分抹去,为了实现普通除法,有两种方法:1.使用实数参与运算。2.导入division模块。如下:
方法一:
>>> 1/2
0
>>> 1.0/2
0.5
>>> 1/2.
0.5
>>> 1.0/2.0
0.5
方法二:
>>> from __future__ import division
>>> 1/2
0.5
当然,这样的话,/只能进行普通除法,而不能进行整除了。
//:在python中,该运算符为整除运算符,地板除,不管操作数是整数还是实数。
>>> 1//2
0
>>> 1.0//2.0
0.0
>>> 3./2.
1.5
幂:python中提供**运算符,进行幂运算。当然了,还可以使用内建函数pow()
>>> 2 ** 3
8
>>> pow(2,3)
8
>>> -2**4
-16
3.2 位运算
位运算只适用于整数,包括与(&)、或(|)、取反(~)、异或(^)、左移(<<)和右移(>>).Python 这样处理位运算:
1).负数会被当成正数的 2 进制补码处理。
2).左移和右移 N 位等同于无溢出检查的2 的 N 次幂运算: 2**N。
3).对长整数来说, 位运算符使用一种经修改的2 进制补码形式,使得符号位 可以无限的向左扩展(思考,c中是怎样的???)
下面看一些例子,以30(011110)、45(101101)、60(111100)为例:
>>> 30&45
12
>>> 30|45
63
>>> ~30
-31
>>> 45&60
44
>>> 45>>1
22
>>> 30<<2
120
>>>
4. 数字的不同进制
像C语言那样,python整数不仅支持十进制数,也支持八进制和十六进制。
八进制:以0开头,包含数字0-7,每一个八进制数字都可由3个二进制位表示
十六进制:以0x或0X开头,由数字0-9和大写或者小写字符a-f构成。每一个十六进制数字都可由4个二进制位表示。
Python中提供了内建函数用于进制转换:hex()和oct(),它们接收一个任意进制的整数对象,分别返回该对象的十六进制和八进制的字符串表示。
>>> hex(78)
'0x4e'
>>> hex(0x67)
'0x67'
>>> oct(076)
'076'
>>> oct(0x34)
'064'
5. 数字的内建函数
数字类型的内建函数一些用于数字转换,一些用于功能运算
5.1 转换工厂函数:
函数 |
功能 |
bool(obj) |
返回对象的bool的布尔值,也就是obj.__nozero()__方法的 |
int(obj,base=10) |
返回字符串或者数值对象的整数表示,可指定进制 |
long(obj,base=10) |
返回字符串或者数值对象的长整型表示,可指定进制 |
float(obj) |
返回字符串或者数值对象的浮点数表示, |
complex(obj) |
返回字符串或者数据对象生成复数对象 |
ord(char) |
返回单个字符的ascii码数值 |
chr(num) |
返回整数对应的ascii码字符 |
例:
#bool
>>> bool(2.1)
True
>>> bool(math)
True
>>> bool(1<2)
True
#int
>>> int('123')
123
>>> int('123',16)
291
>>> int('123',8)
83
#complex
>>> complex('2')
(2+0j)
>>> complex('2+1j')
(2+1j)
>>> complex(2)
(2+0j)
>>> complex(2,-1)
(2-1j)
#ascii码转换
>>> chr(38)
'&'
>>> chr(65)
'A'
>>> ord('a')
97
5.2 功能函数:
abs()、coerce()、divmod()、pow()、round()、floor()
abs(obj):取obj的绝对值,若是复数返回复数的模
>>> abs(-23.4)
23.4
>>> abs(3+4j)
5.0
coerce(x,y):对x和y进行类型转换,返回类型转换一致的元组
>>> coerce(2,1j)
((2+0j), 1j)
divmod(x,y):结合除法和取余,返回x除y的商和余数的元组
>>> divmod(5,2)
(2, 1)
>>> divmod(1.2,10)
(0.0, 1.2)
>>> divmod(2-3j,2+3j)
((-1+0j), (4+0j))
pow(x,y,z=1):求x的y次幂,结果对z取余,默认值是1
>>> pow(2,3)
8
>>> pow(-2.5,2)
6.25
>>> pow(-2,3,3)
1
round(x,y=0):对x进行四舍五入,默认返回整数,y指定精确到小数点后的位数。
>>> round(3.1415)
3.0
>>> round(3.1415,1)
3.1
>>> math.floor(2.3)
2.0
比较:
int():返回数值的整数部分
round():四舍五入,返回最接近数值的整数
floor():返回最接近数值但小于数值的整数
除此之外,math模块中还包含有很多函数可供使用