# 数字 ## 整型 Integers 整型运算,加减乘: In [1]: ``` 2 + 2 ``` Out[1]: ``` 4 ``` In [2]: ``` 3 - 4 ``` Out[2]: ``` -1 ``` In [3]: ``` 4 * 5 ``` Out[3]: ``` 20 ``` 在**Python 2.7**中,整型的运算结果只能返回整型,**除法**的结果也不例外。 例如`12 / 5`返回的结果并不是2.4,而是2: In [4]: ``` 12 / 5 ``` Out[4]: ``` 2 ``` 幂指数: In [5]: ``` 2 ** 5 ``` Out[5]: ``` 32 ``` 取余: In [6]: ``` 32 % 5 ``` Out[6]: ``` 2 ``` 赋值给变量: In [7]: ``` a = 1 a ``` Out[7]: ``` 1 ``` 使用`type()`函数来查看变量类型: In [8]: ``` type(a) ``` Out[8]: ``` int ``` 整型数字的最大最小值: 在 32 位系统中,一个整型 4 个字节,最小值 `-2,147,483,648`,最大值 `2,147,483,647`。 在 64 位系统中,一个整型 8 个字节,最小值 `-9,223,372,036,854,775,808`,最大值 `9,223,372,036,854,775,807`。 In [9]: ``` import sys sys.maxint ``` Out[9]: ``` 2147483647 ``` ## 长整型 Long Integers 当整型超出范围时,**Python**会自动将整型转化为长整型,不过长整型计算速度会比整型慢。 In [10]: ``` a = sys.maxint + 1 print type(a) ``` ``` ``` 长整型的一个标志是后面以字母L结尾: In [11]: ``` a ``` Out[11]: ``` 2147483648L ``` 可以在赋值时强制让类型为长整型: In [12]: ``` b = 1234L type(b) ``` Out[12]: ``` long ``` 长整型可以与整型在一起进行计算,返回的类型还是长整型: In [13]: ``` a - 4 ``` Out[13]: ``` 2147483644L ``` ## 浮点数 Floating Point Numbers In [14]: ``` a = 1.4 type(a) ``` Out[14]: ``` float ``` 在之前的除法例子`12 / 5`中,假如想要使返回的结果为2.4,可以将它们写成浮点数的形式: In [15]: ``` 12.0 / 5.0 ``` Out[15]: ``` 2.4 ``` In [16]: ``` 12 / 5.0 ``` Out[16]: ``` 2.4 ``` In [17]: ``` 12.0 / 5 ``` Out[17]: ``` 2.4 ``` 上面的例子说明,浮点数与整数进行运算时,返回的仍然是浮点数: In [18]: ``` 5 + 2.4 ``` Out[18]: ``` 7.4 ``` 浮点数也可以进行与整数相似的运算,甚至可以取余: In [19]: ``` 3.4 - 3.2 ``` Out[19]: ``` 0.19999999999999973 ``` In [20]: ``` 12.3 + 32.4 ``` Out[20]: ``` 44.7 ``` In [21]: ``` 2.5 ** 2 ``` Out[21]: ``` 6.25 ``` In [22]: ``` 3.4 % 2.1 ``` Out[22]: ``` 1.2999999999999998 ``` **Python**的浮点数标准与**C**,**Java**一致,都是[IEEE 754 floating point standard](http://en.wikipedia.org/wiki/IEEE_floating_point)。 注意看 `3.4 - 3.2` 的结果并不是我们预期的`0.2`,这是因为浮点数本身储存方式引起的,浮点数本身会存在一点误差。 事实上,**Python** 中储存的值为'0.199999999999999733546474089962430298328399658203125',因为这是最接近0.2的浮点数。| In [23]: ``` '{:.52}'.format(3.4 - 3.2) ``` Out[23]: ``` '0.199999999999999733546474089962430298328399658203125' ``` 当我们使用`print`显示时,**Python**会自动校正这个结果 In [24]: ``` print 3.4 - 3.2 ``` ``` 0.2 ``` 可以用`sys.float_info`来查看浮点数的信息: In [25]: ``` import sys sys.float_info ``` Out[25]: ``` sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1) ``` 例如浮点数能表示的最大值: In [26]: ``` sys.float_info.max ``` Out[26]: ``` 1.7976931348623157e+308 ``` 浮点数能表示的最接近0的值: In [27]: ``` sys.float_info.min ``` Out[27]: ``` 2.2250738585072014e-308 ``` 浮点数的精度: In [28]: ``` sys.float_info.epsilon ``` Out[28]: ``` 2.220446049250313e-16 ``` ## 复数 Complex Numbers **Python** 使用 `j` 来表示复数的虚部: In [29]: ``` a = 1 + 2j type(a) ``` Out[29]: ``` complex ``` 可以查看它的实部,虚部以及共轭: In [30]: ``` a.real ``` Out[30]: ``` 1.0 ``` In [31]: ``` a.imag ``` Out[31]: ``` 2.0 ``` In [32]: ``` a.conjugate() ``` Out[32]: ``` (1-2j) ``` ## 交互计算 可以将复杂的表达式放在一起计算: In [33]: ``` 1 + 2 - (3 * 4 / 6) ** 5 + 7 % 5 ``` Out[33]: ``` -27 ``` 在**Python**中运算是有优先级的,优先级即算术的先后顺序,比如“先乘除后加减”和“先算括号里面的”都是两种优先级的规则,优先级从高到低排列如下: * `( )` 括号 * `**` 幂指数运算 * `* / // %` 乘,除,整数除法,取余运算 * '+ -' 加减 整数除法,返回的是比结果小的最大整数值: In [34]: ``` 12.3 // 5.2 ``` Out[34]: ``` 2.0 ``` In [35]: ``` 12.3 // -4 ``` Out[35]: ``` -4.0 ``` ## 简单的数学函数 绝对值: In [36]: ``` abs(-12.4) ``` Out[36]: ``` 12.4 ``` 取整: In [37]: ``` round(21.6) ``` Out[37]: ``` 22.0 ``` 最大最小值: In [38]: ``` print min(2, 3, 4, 5) print max(2, 4, 3) ``` ``` 2 4 ``` ## 变量名覆盖 不要用内置的函数来命名变量,否则会出现意想不到的结果: In [39]: ``` type(max) ``` Out[39]: ``` builtin_function_or_method ``` 不要这样做!!! In [40]: ``` max = 1 type(max) ``` Out[40]: ``` int ``` In [41]: ``` max(4, 5) ``` ``` --------------------------------------------------------------------------- TypeError Traceback (most recent call last) in () ----> 1 max(4, 5) TypeError: 'int' object is not callable ``` ## 类型转换 浮点数转整型,只保留整数部分: In [42]: ``` print int(12.324) print int(-3.32) ``` ``` 12 -3 ``` 整型转浮点型: In [43]: ``` print float(1.2) ``` ``` 1.2 ``` ## 其他表示 除了10进制外,整数还有其他类型的表示方法。 科学计数法: In [44]: ``` 1e-6 ``` Out[44]: ``` 1e-06 ``` 16进制,前面加`0x`修饰,后面使用数字0-9A-F: In [45]: ``` 0xFF ``` Out[45]: ``` 255 ``` 8进制,前面加`0`或者`0o`修饰,后面使用数字0-7: In [46]: ``` 067 ``` Out[46]: ``` 55 ``` 2进制,前面加`0b`修饰,后面使用数字0或1: In [47]: ``` 0b101010 ``` Out[47]: ``` 42 ``` ## 原地计算 In-place **Python**可以使用下面的形式进行原地计算: In [48]: ``` b = 2.5 b += 2 print b b *= 2 print b b -= 3 print b ``` ``` 4.5 9.0 6.0 ``` ## 布尔型 Boolean Data Type 布尔型可以看成特殊的二值变量,其取值为`True`和`False`: In [49]: ``` q = True type(q) ``` Out[49]: ``` bool ``` 可以用表达式构建布尔型变量: In [50]: ``` q = 1 > 2 print q ``` ``` False ``` 常用的比较符号包括: ``` <, >, <=, >=, ==, != ``` **Python**支持链式比较: In [51]: ``` x = 2 1 < x <= 3 ``` Out[51]: ``` True ``` In [ ]: