实际开发中,咱们常常须要使用数字记录游戏中用户的得分、游戏中角色的生命值、伤害值等信息,Python 语言提供了数值类型用于保存这些数值。
须要注意的是,Python 中这些数值类型都是不可改变的,也就是说,若是咱们要修改数字类型变量的值,那么其底层实现的过程是,先将新值存放到内存中,而后修改变量让其指向新的内存地址,换句话说,Python 中修改数值类型变量的值,其实只是修改变量名所表示的内存空间。
数值类型只是一个泛泛的统称,Python 中的数值类型主要包括整形、浮点型和复数类型。python
整形专门用来表示整数,即没有小数部分的数。在 Python 中,整数包括正整数、0 和负整数。
和其余强类型语言不一样,它们会提供多种整形类型,开发者要根据数值的大小,分别用不一样的整形类型存储,以 C 语言为例,根据数值的大小,开发者要合理选择 short、int、long 整形类型存储,大大增长了开发难度。
Python 则不一样,它的整型支持存储各类整数值,不管多大或者多小,Python 都能轻松处理(当所用数值超过计算机自身的计算功能时,Python 会自动转用高精度计算)。
例如以下代码:android
#定义变量a,赋值为56 a = 56 print(a) #为a赋值一个大整数 a = 9999999999999999999999 print(a) #type()函数用于返回变量的类型 print(type (a))
对于没有编程基础的读者, 一样能够在交互式解释器中逐行“试验”上面程序来观看运行效果。因为篇幅限制,本教程后面的程序再也不详细列出在交互式解释器中逐行“试验”的过程。编程
上面程序中,将 9999999999999999999999 大整数赋值给变量 a,Python 也不会发生溢出等问题,程序运行同样正常,这足以证实 Python 的强大。
使用 Python 3.x 运行上面程序,能够看到以下输出结果:编程语言
56 9999999999999999999999 <class 'int'>
从上面的输出结果能够看出,此时 a 依然是 int 类型。
但若是用 Python 2.x 运行上面程序,因为输入的数值比较大,Python 会自动在其后面加上字母 L(或小写字母 l),以下输出结果:函数
56 9999999999999999999999L <type 'long'>
对比两种输出结果,不难发现:不论是 Python 3.x 仍是 Python 2.x,Python 彻底能够正常处理很大的整数,只是 Python 2.x 底层会将大整数当成 long 类型处理,但开发者一般不须要理会这种细节。
除此以外,Python 的整型还支持 None 值(空值),例如以下代码:测试
a = None print(a) #什么都不输出
Python 的整型数值有 4 种表示形式:spa
下面代码片断使用了其余进制形式的数:.net
#以0x或0X开头的整型数值是十六进制形式的整数 hex_value1 = 0x13 hex_value2 = 0xaF print("hexValue1 的值为:",hex_value1) print("hexValue2 的值为:",hex_value2) #以0b或0B开头的整型数值是二进制形式的整数 bin_val = 0b111 print('bin_val的值为:',bin_val) bin_val = 0B101 print('bin_val的值为:',bin_val) #以0o或0O开头的整型数值是八进制形式的整数 oct_val = 0o54 print('oct_val 的值为:',oct_val) oct_val = 0O17 print('oct_val 的值为:',oct_val)
为了提升数值(包括浮点型)的可读性,Python 3.x 容许为数值(包括浮点型)增长下画线做为分隔符。这些下画线并不会影响数值自己。例如以下代码:code
# 在数值中使用下画线 one_million = 1000000 print(one_million) price = 234_234_234 #price 实际的值为234234234 android = 1234_1234 #android 实际的值为12341234
浮点型数值用于保存带小数点的数值,Python 的浮点数有两种表示形式:教程
必须指出的是,只有浮点型数值才可使用科学计数形式表示。例如 51200 是一个整型值,但 512E2 则是浮点型值。
下面程序示范了上面介绍的关于浮点数的各个知识点:
af1 = 5.2345556 #输出af1的值 print("af1的值为:",af1) af2 = 25.2345 print("af2的类型为:",type(af2)) f1=5.12e2 print("f1的值为:",f1) f2 = 5e3 print("f2的值为:",f2) print("f2的类型为:",type(f2))#看到类型为float
经过第 8 行代码能够看出,虽然 5e3 的值是 5000,但它依然是浮点型值,而不是整型值,由于 Python 会自动将该数值变为 5000.0。
注意,使用浮点数进行计算时,可能会出现小数位数不肯定的状况,好比说,计算 0.1+0.2,原本应该获得 0.3,但通过测试你会发现,Python解释器的运行结果为 0.30000000000000004。几乎全部编程语言都存在这个问题,这与浮点数在底层的存储方式有关系(后续章节会作详细介绍)。
Python 甚至能够支持复数,复数的虚部用 j 或 J 来表示。
若是读者对虚数虚部感到困惑,请直接跳过本节,大部分编程并不会用到复数这么“高级”的数学知识。
若是须要在程序中对复数进行计算,可导入 Python 的 cmath 模块(c 表明 complex),在该模块下包含了各类支持复数运算的函数。
模块就是一个 Python 程序,Python 正是经过模块提升了自身的可扩展性的;Python 自己内置了大量模块,此外还有大量第三方模块,导入这些模块便可直接使用这些程序中定义的函数。
下面程序示范了复数的用法:
ac1 = 3 + 0.2j print (ac1) print(type(ac1)) #输出复数类型 ac2 = 4 - 0.1j print(ac2) #复数运行 print(ac1 + ac2) #输出(7+0.1j) #导入cmath 模块 import cmath #sqrt()是cmath 模块下的商数,用于计算平方根 ac3 = cmath.sqrt(-1) print (ac3) #输出1j