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"<pyshell#17>", line 1, in <module>
    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"<pyshell#25>", line 1, in <module>
    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
<built-in method conjugate of complex object at0x0130F350>
>>> 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模块中还包含有很多函数可供使用