2.2 数字数据
这节我们将探讨Python最基本的赋值语句和数字的数据类型。
2.2.1 变量与赋值
变量是我们广为熟悉的概念。程序语言中的变量和数学上的变量类似,如果需要对x赋值3,执行下面语句:
>>> x = 3
这样程序将会为变量x申请地址并存储它。“=”的这个操作称为赋值。如果再执行:
>>>x*2 6
图2-1 变量与地址
那么结果返回3*2的值,但注意运行后x的值仍为3,如果希望保存6的值,可写成x=x*2或x*=2。不过,Python的变量是不可变对象,读者可能会感到疑惑,x*=2这个语句就已经让x的值发生了改变,为什么还说变量是不可变的呢?实际上,如果变量的值发生改变,Python会自动创建另一个对象申请另一块的内存,并改变变量的对象引用,如图2-1所示。这样做的优点是减少了重复的值对内存空间的占用,而缺点则是每次修改变量都需要重新开辟内存单元,给执行效率带来一定影响。下面的代码清单2-1给出了一个例子。
代码清单2-1 变量与赋值
print '''变量与赋值 ''' x=3 print x # result: 3 print id(x) # 查看 x的内存地址,每次运行都会发生变化 #result: 39011144 x*=2 print x #result: 6 print id(x) # 再次查看 x的内存地址,每次运行都会发生变化,但内存必然会变化 #result: 39011108
*代码详见:示例程序/code/2-2.py
2.2.2 数字数据类型
数字的基本数据类型可分为整数、浮点数、布尔值。创建变量时,Python不需要声明数据类型,Python能够自动识别数据类型。x=3的数据类型是整数,而x=3.3的数据类型是浮点数,函数type(x)可以查看数据的数据类型。布尔值只有True和False两种值,支持and、not、or三种运算,这在2.1.4节中已经介绍到。
和数学运算不同的地方是,Python的整数结果仍然是整数,如果操作符两端其中一个操作数是浮点数,那么运算结果是浮点数。如:
1+2=>整数 3 1.0+2=>浮点数 3.0
整数运算的结果永远是精确的,而浮点数运算的结果不一定是精确的。计算机的内存是有限的,无法存储无限位的小数。Python的浮点数实际上是双精度浮点数,在C中称为double类型,具体存储方式读者可以参考维基百科[1] 。举一个丢失精度的例子,如果在Shell输入:
>>>1/10**9*10**9 >>>0
结果返回0,这是因为1除以10的9次方的数太小,计算机只存储到前面的0,除法过后返回了结果0,然后0乘以任何数都返回0,最后导致精度的丢失。所以在数值计算算法的设计上,常常要考虑精度丢失的问题,有时候一个好的办法是改变运算顺序:
>>>1*10**9/10**9 >>>1
[1] http://en.wikipedia.org/wiki/Double_precision。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论