数字
基本类型
首先,进入Python交互模式中:
//整数
>>> 3
3
//长整数
>>> 33333333333333333333333333
33333333333333333333333333L
//浮点数
>>> 3.22222222222
3.22222222222
//负数
>>> -234
-234
//十六进制数
>>> 0xff
255
//八进制
>>> 010
8
在交互模式下:
如果输入3,就显示3,称为整数
当输入一个比较大的整数时,Python会自动会将这个大整数进行转换,转换的结果是一个“长整数”类型,为了表示它,会在其末尾显示一个L。由于这个操作是Python自动完成的,所有在Python中没有单独将“长整数”作为一个类型。
如果输入一个负数,直接在数字前面加上符号即可
Python也支持二进制、八进制、十六进制数。
对象身份
每个数字在Python都是一个对象,每个对象,在内存中都有自己的一个地址,这就是它的身份,用内建函数id()可以查看每个对象的内存地址即身份。
>>> id(3)
39679608
>>> id(-3)
39679680
>>> id(2.33)
39712264
>>> id(3.0)
48962672
>>>
以上四个不同的数字是四个不同的对象,具有四个不同的内存地址。特别要注意,在数学上,3和3.0是相等的,但在这里,它们是不同的对象。
对象类型
如果要查找一个对象的类型,则使用type()这个内建函数。
>>> type(3)
<type 'int'>
>>> type(-3)
<type 'int'>
>>> type(0.3)
<type 'float'>
>>> type(222222222222222222222222222)
<type 'long'>
变量
>>> x = 5
>>> x
5
>>> x = 6
>>> x
6
>>>
在Python中,对象有类型,变量无类型
当Python中写入5、6时,计算机就自动在其内存中某个地方建立了这两个对象,这两个对象的类型就是Int
上述代码中的x就好比是个标签,当x=5时,就是将x这个标签拴在了5上,通过这个x,就找到了5,于是“>>>x”输出的结果就是5。所以这个标签x没有类型之说,它不仅可以贴在整数类型的对象上,还可以贴在其他类型的对象上。
简单的四则运算
//加
>>> 3 + 5
8
//减
>>> 5 - 3
2
//乘
>>> 5 * 3
15
//整除
>>> 8 / 4
2
//模除
>>> 8 % 3
2
//混合运算
>>> 2 * 3 -4
2
整数溢出问题
在一些高级编程语言中,整数溢出是必须正视的,但是,在Python里就无需担心了,原因就是Python为我们解决了这个问题,它支持“无限精度”的整数,所以,不用考虑整数溢出的问题,Int类型与任意精度的Long整数类型可以无缝转换,超过Int范围情况都将自动转换成Long类型。
如下计算:
>>> 1234456678888914781548154815481 * 618468146815418458154815481548
763472134516343226654595368107241568115304361007546100244588L
你还可以在交互模式下计算2的1000次幂,计算方法是:
>>> 2 ** 1000
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376L
>>>
除法
整数与整数相除
>>> 2 / 5
0
>>> 2.0 / 5
0.4
>>> 2 / 5.0
0.4
>>> 2.0 / 5.0
0.4
Python2.x中
整数除整数,商是整数
整数除浮点数或浮点数除整数,商是浮点数
整数与浮点数相除
>>> 9.0 / 2
4.5
>>> 9 / 2.0
4.5
>>> 9.0 / 2.0
4.5
>>>
不管是除数或者被除数,只要有一个数是浮点数,结果就是浮点数。
然而,下面的计算可能会有点不好理解:
>>> 10.0 / 3
3.3333333333333335
>>> 0.1 + 0.2
0.30000000000000004
>>> 0.1 + 0.1 - 0.2
0.0
>>> 0.1 + 0.1 + 0.1 - 0.3
5.551115123125783e-17
>>> 0.1 + 0.1 + 0.1 - 0.2
0.10000000000000003
>>>
原因在于十进制和二进制的转换上,计算机使用的是二进制进行计算,在上面的例子中,我们输入的是十进制,就要把十进制转换成二进制,然后在计算。但是在转化中,浮点数转化为二进制后,不会精确等于十进制的0.1。因为计算机存储的位数是有限制的,所有就出现了上述现象。
一般情况下,只要简单地将最终显示的结果用“四舍五入”到所期望的十进制位数,就会得到期望的最终结果。
对于需要非常精确的情况,可以使用decimal模块,它实现的十进制运算适合高精度要求的应用。另外fractions模块支持另外一种形式的运算,它实现的运算基于有理数。最高要求则是使用有SciPy提供的Numerical Python包和其他用于数学和统计学的包。
引用模块解决除法问题
我们可以通过以下两种形式引入模块:
形式1:import module-name。import后面跟空格,然后是模块名称,例如 import os
形式2:from module1 import module11。module1是一个大模块,里面还有子模块module11,只想用module11,就这么写。
如下是解决除法问题的模块:
>>> from __future__ import division
>>> 5 /2
2.5
>>> 9 / 2
4.5
>>> 9.0 / 2
4.5
引用了此模块后,不管什么情况,都能够得到浮点数的结果了。
余数
模除,用%符号来取得两个数相除的余数
>>> 5 % 2
1
>>> 9 % 4
1
>>>
内建函数divmod()
>>> divmod(5,2)
(2, 1)
>>> divmod(9,4)
(2, 1)
内建函数divmod()返回的是两个值,这两个值在一个圆括号内,圆括号内的数字第一个表示商,第二个表示余数。
四舍五入
内建函数round()。
>>> round(1.234567,2)
1.23
>>> round(1.234567,3)
1.235
>>> round(10.0 /3 ,4)
3.3333
>>>
在round()中的第二个数,表示要保留的小数位数,返回值是一个四舍五入之后的数值。
接下里看下面的特殊情况:
>>> round(0.12345,3)
0.123 #应该是1.235
>>> round(2.235,2)
2.23 #应该是2.24
>>>
这不是Python地Bug,归根到底是浮点数中的十进制转化为二进制引起的问题
常用数学函数和运算优先级
math模块
math模块是Python标准库中的,所以不用安装就可以直接安装。使用方法是:
>>> import math
这样就将math模块引用进来了,下面就可以使用这个模块提供的工具了,比如要得到圆周率:
>>> import math
>>> math.pi
3.141592653589793
>>>
这个模块都能做些什么事情呢?可以用下面的方法看到:
>>> dir(math)
['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
>>>
dir(module)可以查看任何模块所包含的工具。
help(function)可以用来查看每个函数的使用情况。
>>> help(math.pow)
Help on built-in function pow in module math:
pow(...)
pow(x, y)
Return x**y (x to the power of y).
>>>
下面来看看一些基本函数的使用:
#开平方
>>> math.sqrt(9)
3.0
#绝对值
>>> math.fabs(-2)
2.0
#模除
>>> math.fmod(5,3)
2.0
两个函数
1.求绝对值
>>> abs(10)
10
>>> abs(-10)
10
>>> abs(-1.2)
1.2
2.四舍五入
>>> round(1.234)
1.0
>>> round(1.234,2)
1.23
运算优先级
运算规则表:
运算符 | 描述 |
---|---|
lamba | Lamba表达式 |
or | 布尔或 |
and | 布尔与 |
not x | 布尔非 |
in,not in | 成员测试 |
is,is not | 同一性测试 |
<,<=,>,>=,!=,== | 比较 |
竖线 | 按位或 |
^ | 按位异或 |
& | 按位与 |
<<,>> | 移位 |
+,- | 加减 法 |
*,/,% | 乘除、取余 |
+x,-x | 正负号 |
~x | 按位翻转 |
** | 指数 |