2015/8/29 Python基础(3):数值

数字提供了标量储存和直接访问,是不可更改类型,每次变更数值会产生新的对象。Python支持多种数字类型,包括整型、长整型、布尔型、双精度浮点、十进制浮点和复数。
在Python中,变量并不是一个盒子,而是一个指针指向装变量值的盒子。对于不可更改类型来说,没办法改变盒子的内容,但是可以指向一个新的盒子。
我们没办法删除一个数值对象,仅可以不再使用它。内存管理是由Python自己接管的。可以使用del语句来删除引用,但那样的话,这个引用(也就是变量)就不能使用了,除非给它一个新值

>>> anint = 1
>>> del anint
>>> anint

Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
anint
NameError: name ‘anint‘ is not defined

数值类型
布尔型
取值范围只有两个值,True和False。
实际上是整型的子类,但不能再被继承而生成它的子类。数学运算中,True和False分别对应1和0
由于在Python2中,True和False都不是关键字,所以会出现以下的代码情况

>>> True, False = False, True
>>> print True
False
>>> print False
True

这只是个示例,在实际编程中,不管出现什么情况都不应该这么干。

整数类型
Python的标准整数类型是通用的数字类型,在32位机上范围是32位,64位机则是64位。书上说标准整型等价于C的(有符号)长整型,但就我的学习,因为C的标准变更,应该是等价于C的整型。
而Python的长整型,是一个非常大范围的数,取值范围仅仅与机器支持的内存大小有关。书写时用大写字母L作为后缀标注长整型。
这里可以用作str()和repr()区别的一个示例

>>> along = 9999999999L
>>> str(along)
‘9999999999‘
>>> repr(along)
‘9999999999L‘

可以看到之前提到的str()对人更友好repr()对Python更友好。

而在Python2.4以后,整型和长整型开始了融合,当整型出现溢出时,就会自动转换为长整型,所以不是特殊的情况下,几乎感觉不到长整型的存在。

Python的浮点型类似于C的double。可以直接用十进制或者科学计数法表示。
Python支持复数类型。虚数部分有后缀j或J。写法是real+imagj
复数是有数值属性的,可以用num.real来调用实部,用num.imag来调用虚部,用num.conjugate()来调用共轭复数。

运算符
混合模式运算符
Python是支持混合模式运算符的,可以将不同类型的数值直接相加。当两个整数相加时,+ 是整数加法,当两个浮点数相加时 + 是浮点数加法,以此类推。非数字类型也可以使用 + 运算符。字符串A + 字符串B表示连接字符串。+ 运算符的多种使用体现了重载概念的应用。
虽然不能让一个数字和字符串相加,但是不同类型的数字相加是可以的。整数和浮点数相加时,系统会使用浮点数加法。这种强制类型转换遵循以下规则:
  如果一个操作数是复数,另一个被转换成复数
  否则,如果一个操作数是浮点,另一个被转换成浮点
  否则,如果一个操作数是长整型,另一个被转换成长整型
  否则,两者都是普通整数,直接相加。
  此外的,还有不少算术运算符,这里不赘述。

同时Python对于整数还提供了位运算符,和C语言中一致,对我十分友好。

数字类型函数
转换工厂函数int(),long(),float(),complex(),bool().将不同的类型,转换成需要的类型。
功能函数,Python还有以下的内建函数用于数值运算abs(),coerce(),divmod(),pow(),round()
abs()是返回参数绝对值,如果是个复数,就返回math.sqrt(num.real**2 + num.imag**2)
coerce()是一个数据类型转换函数,将两个数值转换成可以运算的数值类型。
divmod()是发挥一个包含商和余数的元组。也可以用复数和小数作为参数。
pow()和**都表示幂。一个为内建函数一个为运算符。
round()用于对浮点数进行四舍五入运算,有一个可选的小数位数参数,可以选择精确位数。
int(),round(),math.floor()似乎在做同一件事,但int()是截去小数部分,floor()得到最接近原数但小于原数的整数,round()得到最接近原数的整数。
仅用于整数的函数
进制转换,oct()和hex()返回8进制和16进制的数
ASCII转换函数,chr()是接受数值返回字符,ord()是接受字符返回ASCII码值
同时还有unichr()是接受Unicode码值返回Unicode字符。

十进制浮点数
用十进制浮点可以提高一些浮点运算的精度,需要导入decimal模块以便使用Decimal类
但是Decimal()只能导入字符串。

random模块,random模块包含多个伪随机数发生器,以当前时间为随机数种子,产生随机数。
有以下几个函数:

>>> import random
>>> random.random()#随机生成一个0到1之间的浮点数
0.015119438297251486
>>> random.uniform(10,20)#随机生成两个参数范围内的浮点数
15.620562881753816
>>> random.uniform(20,10)#参数大小部分先后
18.444370827768715
>>> random.randint(10,20)#随机生成两个参数范围内的整数
18
>>> random.randint(10,20)#参数大小不分先后
11
>>> random.randrange(1,100,15)#参数分别为(start,stop,step)
16
>>> random.choice("abcdefg")#序列里随机获取一个元素
‘g‘
>>> list = [1, 2, 3, 4, 5, 6, 7]
>>> random.shuffle(list)#打乱列表的元素
>>> print list
[4, 6, 7, 5, 1, 3, 2]
>>> random.sample(list,2)#从一个列表中随机截取指定长度
[3, 4]
时间: 2024-08-07 04:32:43

2015/8/29 Python基础(3):数值的相关文章

2015/9/29 Python基础(20):类的授权

类的授权 1.包装包装在Python编程世界中时经常会被提到的一个术语.它是一个通用的名字,意思是对一个已存在的对象进行包装,不管它是数据类型,还是一段代码,可以是对一个已存在的对象,增加新的,删除不要的,或者修改其他已存在的功能.在Python2.2以前,从Python的标准类型子类化或派生类都是不允许的,即使你现在可以这么做,这种做法也并不多.你可以包装任何类型作为一个类的核心成员,以使新对象的行为模仿你想要的数据类型中已存在的行为,并且去掉你不希望存在的行为:它可能会要做一些额外的事情.这

2015/9/22 Python基础(18):组合、派生和继承

一个类被定义后,目标就是把它当成一个模块来使用,并把这些对象嵌入到你的代码中去,同其他数据类型及逻辑执行流混合使用.有两种方法可以在你的代码中利用类.第一种是组合,就是让不同的类混合并加入到其他类中,来增强功能和代码重用性.你可以在一个大点的类中创建你自己的类的实例,实现一些其他属性和方法来增强原来的类对象.另一种是派生,通过子类从基类继承核心属性,不断地派生扩展功能实现. 组合举例来说,我们想对之前做过的地址本类作加强性设计.如果在设计的过程中,为names.addresses等创建了单独的类

2015/9/9 Python基础(10):文件和输入输出

文件对象文件对象不仅可以用来访问普通的磁盘文件,而且也可以访问其它任何类型抽象层面上的“文件”.一旦设置了合适的“钩子”,你就可以访问文件类型接口的其它对象,就好像访问的是普通文件一样.文件对象的处理要以来很多内建函数,还有很多函数会返回文件对象或者是类文件对象.进行这种轴向处理的主要原因是许多输入/输出数据结构更趋向于使用通用的接口.这样就可以在程序行为和实现上保持一致性.文件只是连续的字节序列,数据传输经常会用到字节流,无论字节流是由单个字节还是大块数据组成. 文件内建函数[open()和f

2015/9/4 Python基础(8):映射和集合类型

Python里唯一的映射类型是字典.映射类型对象里,hash值(key)和指向的对象(值)是一对多的关系.字典对象是可变的,这一点上很像列表,它也可以存储任意个数任意类型的Python对象,其中包括容器类型.字典类型和序列类型的区别是存储和访问数据的方式不同.序列类型只用数字类型的键(从序列开始按数值顺序索引.)映射类型的键(key)可以是其他的对象类型(一般是字符串),映射类型的键直接或间接地和存储的数据值相关联.而在映射类型中,数据是无序排列的. 一个字典条目的语法格式是 键:值. 多条字典

2015/8/28 Python基础(2):对象

Python用对象模型来存储数据.构造任何类型的值都是一个对象.Python对象都有是三个特性:身份,类型和值 身份是每个对象的唯一身份标识.任何对象都可以用内建函数id()来得到身份.如: >>> s = 1 >>> id(s) 38249176 身份可以认为是该对象的地址. 类型是数据以何种方式保存,可以进行怎样的操作,遵循怎样的规则.可以使用内建函数type()来查看. 值就是对象的数据项. 上面三个特性在对象创建时被赋值,除值以外其他特性都是只读.对象的类型是可

2015/9/19 Python基础(15):变量作用域及生成器

变量作用域标识符的作用域是定义为其声明的可应用范围,或者即是我们所说的变量可见性.也就是,我们可以在程序的那个部分去访问一个制定的标识符.全局变量与局部变量定义在函数内的变量有局部作用域,在一个模块中最高级别的变量有全局作用域.全局变量的一个特征是除非被删除掉,否则它们将存活到脚本运行结束,且对于所有的函数,他们的值都是可以被访问的,然而局部变量,就像它们存放的栈,暂时地存在,仅仅只依赖于定义它们的函数现阶段是否处于活动.当一个函数调用出现时,其局部变量就进入声明它们的作用域.在那一刻,一个新的

2015/9/19 Python基础(14):变量作用域及生成器

变量作用域标识符的作用域是定义为其声明的可应用范围,或者即是我们所说的变量可见性.也就是,我们可以在程序的那个部分去访问一个制定的标识符.全局变量与局部变量定义在函数内的变量有局部作用域,在一个模块中最高级别的变量有全局作用域.全局变量的一个特征是除非被删除掉,否则它们将存活到脚本运行结束,且对于所有的函数,他们的值都是可以被访问的,然而局部变量,就像它们存放的栈,暂时地存在,仅仅只依赖于定义它们的函数现阶段是否处于活动.当一个函数调用出现时,其局部变量就进入声明它们的作用域.在那一刻,一个新的

2015/9/15 Python基础(12):模块和包

模块是用来组织 Python 代码的方法,而包则是用来组织模块的. 当代码量很大时,我们一般会把代码分成几个有组织的代码段,然后每个代码段之间有一定的联系.代码单之间是共享的,所以Python允许调入一个模块,允许使用其他模块的属性利用之前的工作成果,实现代码重用.那些自我包含并且有组织的代码片段就是模块(module),将其他模块中属性附加到你的模块中的操作较导入(import) 模块是逻辑上的说法,而它们在物理层是一个个独立的文件,模块的文件名就是模块的名字加拓展名.py.与其他可以导入类的

2015/10/9 Python基础(21):可调用和可执行对象

在Python中有多种运行外部程序的方法,比如,运行操作系统命令或另外的Python脚本,或执行一个磁盘上的文件,或通过网络来运行文件.这完全取决于想要干什么.特定的环境包括: 在当前脚本继续运行 创建和管理子进程 执行外部命令或程序 执行需要输入的命令 通过网络来调用命令 执行命令来创建需要处理的输出 执行其他的Python脚本 执行一系列动态生成的Python语句 导入Python模块 Python中,内建和外部模块都可以提供上述各种功能.程序员得根据实现的需要,从这些模块中选择合适的处理方