Python:数字
一、数字简介
数字可以直接访问,是不可更改并且不可分割的原子类型,这些在标准类型的分类中都谈到了。不可更改意味着变更数字值的实质是新对象的创建。当然,这些对于程序员来说都是透明的,不需过多考虑。
1.对象的创建和赋值
|
1
2
3
4
5
|
#像大多数脚本语言一样,无需指定类型 anInt = 1aLong = 999999LaFloat = 3.1415aComplex = 1.2 + 3.3j |
2.更新数字对象(即重新赋值,注意其本质:新对象的创建!)
|
1
2
|
anInt += 1aFloat = 3.1415926 |
3.“删除”数字对象
|
1
|
del anInt |
注意:我们只是删除了对象的引用,而不是删除了对象本身(相当于使对象内部计数器的值减少1),这时anInt不引用任何对象,就行从来没有定义一样。对象本身的删除是由Python内部的内存管理功能进行的。
二、类型详解
1.整形
标准整形
标准整形是最通用的数字类型。在32位计算机中为4字节,64位计算机中8字节。标准整形是有符号的,因此你可以简单的计算出其数字范围。Python同样支持8进制(以0开始)和16进制(以0x或0X开始)表示。如:128, 100000, 0752, 0xFF, 0XFE86A
长整形
首先不要把Python的长整形和C或其它语言的同名概念混为一谈。Python长整形所能表达的数字范围和计算机的虚拟内存大小有关,也就是说,Python可以很轻松表达很大的整数。
|
1
2
3
4
5
|
3656135465463LaLong1 = 946546646LaLong2 = 10L #后跟L申明为长整形 aLong3 = 10l #虽然小写l也可以,但为了避免和数字1混淆 #最好使用大写 |
随着Python的逐渐改进,用户会几乎感觉不到长整形的存在,运算过程中,必要时,整形会自动转换为长整形,从而使得用户将注意力集中在计算逻辑上。
2.双精度浮点型
Python中的浮点型类似C中的double,是双精度的,遵循IEEE754规范。可用10进制或者科学记数法表示:
0.0 -777. 4.2e-10 -1.69e-19
3.复数
复数语法:real + imag j 虚数不能单独存在,必须和值为0的实部部分构成复数。实数部分和虚数部分都是浮点型,虚数部分结尾必须是j或J
复数包含两个浮点属性:real(实数部分),imag(虚数部分),还有一个方法:conjugate(),用以获取其共轭复数。
|
1
2
3
4
5
|
aComplex = 3.5 + 2.9jaComplex #返回(3.5+2.9j) aComplex.real #返回3.5 aComplex.imag #返回2.9 aComplex.conjugate() #返回(3.5-2.9j) |
4.布尔型
布尔型只有两个值,“True”和“False”。事实上,布尔型是整形的子类,对于整形的1和0。使用内建函数bool返回布尔对象。布尔型在前面的笔记中已经详细讲过了,这里不再赘述。
|
1
2
3
4
5
6
|
bool() #返回False bool(1) #返回True bool(0) #返回False bool(True) #返回True bool(False) #返回False True + True #返回2,因bool值实质是整形 |
5.十进制浮点型(注意:此类型不是标准类型,是由额外模块实现的,需用import引入)
因二进制的一些特性,使其在进行金融以及科学计算时存在不准确性,这常常让程序员很恼火。使用十进制进行这些计算就会好很多,decimal模块提供的Decimal类可以帮助实现十进制运算。
|
1
2
3
4
5
6
7
|
from decimal import Decimal #没见过上述用法?没关系,先明白意思:从模块decimal中引入Decimal类 decNumber = Decimal('100.32') #包裹数字的引号是必须的! print decNumber + Decimal('234.11') decNumber + 110 #这是错误的,不可混用十进制浮点型和标准浮点型! |
三、操作符
1.混合模式下的运算规则
两个不同类型的数字对象进行运算时,Python就要对其中一个进行强制类型转化,继而进行运算,这个道理和C中的自动转化是相似的。基本规则:整形转换为浮点型,非复数转换为复数。总之就是:简单类型向复杂类型转换,不精确类型向更精确类型转换。很简单的道理!
*自动转换是通过内建函数coerce()实现的,待会儿会讲到。
2.除法
传统除法“/”,和C语言中类似:
整数相除得整数: 1/2 --> 0
若除数、被除数有一个或两个都是浮点数,执行真正的除法: 1.0/2 --> 0.5
通过以下方法可以使传统除法称为真正的除法:
|
1
2
3
|
from __future__ import division 1/2 #得到0.5,真正的除法! 1.0/2.0 #得到0.5,真正的除法! |
地板除法“//”,即返回商在数轴上左侧最近的整数。
整数相除得到的结果是整数:12//5 --> 2
若除数、被除数有一个或两个都是浮点数,返回的结果是浮点的: 12.0//5.0 --> 2.0
3.其它运算符
其它运算符,如求余,幂运算等签名已经讲过,内容简单,这里不再赘述;和C语言一样,位运算规则不变,这里也不再赘述。
四、内建函数与工厂函数
上一节介绍了cmp(), str(), type() 等内建函数,它们可以用于所有的标准类型。下面要介绍的是专门针对数字的内建函数。
1.转换工厂函数(注意:称之为“工厂函数”,便意味着:转换是表现,实质是创建新对象)
有五个:int(), long(), float(), complex(), bool()
|
1
2
3
4
5
|
int(4.225) #返回4,实质是生产了一个int类型对象 long(42) #返回42L float(4) #返回4.0 complex(11, 9.0) #返回(11+9.0j) bool(0.000001) #返回True |
2.功能函数
abs()
返回绝对值,如果参数是整形,返回整形,如果是浮点型,返回浮点类型,同样也可用于复数绝对值的计算,即返回实部和虚部平方和的二次方根。
coecre()
前面提到过它,返回类型转换完毕的两个数值元素的元组:
|
1
2
|
coerce(1,1111111111111) #返回(1L,1111111111111L) coerce(12.0, 123L) #返回(12.0, 123.0) |
divmod()
此函数将除法和求余结合起来,返回一个包含商和余数的元组:
|
1
2
|
divmod(10, 3) #返回(3, 1) divmod(2.5, 10) #返回(0.0, 2.5) |
pow()
此函数的功能和"**"一样,实现指数运算:
|
1
2
|
pow(2, 5) #返回32 pow(5, 2) #返回32 |
round()
round()做真正的四舍五入!可以用第二个参数指定精确到小数点后第几位:
|
1
2
3
|
round(4.499) #返回4.0 round(4.499, 1) #返回4.5 round(4.5) #返回5.0 |
注意int(), round(), floor()的区别:int直接去掉小数部分,floor取商左侧数轴上最近的整数,round是名副其实的四舍五入。
3.仅用于整形的函数
以下几个函数虽然不能发扬共产主义的好作风,但也是很有用的(但愿文章不会因这句话被河-蟹掉):
进制转换
hex():任意进制整数到16进制转换
oct():任意进制整数到8进制的转换
ASCII转换函数
ord():字符转换到ASCII码,如:ord('a'),返回97
chr():ASCII码值转换到字符,如:chr(65),返回'A'
unichr():接受Unicode码值,返回相应的字符
五、相应模块
1.针对高级数学运算
对于高级的数学科学运算,可以考虑专用的第三方模块:Numeric(NumPy),SciPy
2.Python提供了以下扩展模块,用以辅助数值运算:
decimal 实现了十进制浮点运算类Decimal
array 高效数值数组(字符,整形,浮点型等)
math/cmath 提供标准C库数学运算函数
operator 数字操作符的函数实现
random 提供多种伪随机数生成器
*使用时使用”import module_name“导入模块,使用”dir(module_name)“查看模块内容,使用“help(module_name)”获取模块相关的帮助信息
3.核心模块random
程序设计过程中,随机数的使用很频繁,以下是random模块中最常用的函数:
randint() 两个整形参数,返回两者之间的随机参数
randrange() 接受range()类似的参数,返回range(start, end, step)结果的一项
uniform() 几乎和randint一样,不过返回的是两者之间的一个浮点值
random() 返回一个0到1之间的浮点值
choice() 随机返回给定序列的一个元素
六、小结
事实上,在Python中进行数值运算,需要程序员考虑的问题和C/C++比起来少多了,从而使得我们可以将注意力放在计算逻辑上。而且,当你读完这篇笔记会发现,其实我没有讲多少,你也没有学多少,因为,太多的内容,你原来是那么的熟悉!
Python:数字的更多相关文章
- python数字图像处理(17):边缘与轮廓
在前面的python数字图像处理(10):图像简单滤波 中,我们已经讲解了很多算子用来检测边缘,其中用得最多的canny算子边缘检测. 本篇我们讲解一些其它方法来检测轮廓. 1.查找轮廓(find_c ...
- python 数字类型
数值类型:整型(int)-通常被称为是整型或整数,是正或负整数,不带数点.长整型(long integers)-无限大小的整数,整数最后是一个大写或者小写的L浮点型(floadting point r ...
- Python数字(Number)
Python 数字数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变数字数据类型得值,将重新分配内存空间. 以下实例在变量赋值时 Number 对象将被创建:var1 = 1var2 ...
- Python数字与字符之间的转换
Python数字与字符之间的转换 命令 意义 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 co ...
- python 数字
python数字: 本文主要讲解常用的数字类型转换, 数字函数和随机数字函数. # coding:utf-8 # python数字类型转换 def data_conversion(): "& ...
- Python 数字(Number)
Python 数字(Number) Python 数字数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间. 以下实例在变量赋值时 Number 对象 ...
- 「转」python数字图像处理(18):高级形态学处理
python数字图像处理(18):高级形态学处理 形态学处理,除了最基本的膨胀.腐蚀.开/闭运算.黑/白帽处理外,还有一些更高级的运用,如凸包,连通区域标记,删除小块区域等. 1.凸包 凸包是指一 ...
- Python - 数字 - 第六天
Python 数字(Number) Python 数字数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间. 以下实例在变量赋值时 Number 对象 ...
- Python 数字类型转换
Python数字类型转换: int(x):将 x 转换为一个整数 float(x):将 x 转换为一个浮点数 complex(x,y):将 x 和 y 转换为一个复数.x 为复数的实部,y 为复数的虚 ...
- python数字图像处理(1):环境安装与配置
一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...
随机推荐
- Ext.grid.plugin.RowExpander的简单用法
有时候,我们在grid里渲染数据时,由于某些字段的内容太长,而grid又不会自动出现滚动条,于是溢出的内容后面就会出现省略号, 导致信息展示不完全.如果,这个信息不太重要,展示不完全也无关紧要.可是, ...
- SQL[连载1]简介
SQL[连载1]简介 SQL 教程 SQL 是用于访问和处理数据库的标准的计算机语言. 在本教程中,您将学到如何使用 SQL 访问和处理数据系统中的数据,这类数据库包括:MySQL.SQL Serve ...
- 没有显示器且IP未知的情况下登录树莓派
如果是没有显示器操作树莓派,可能会不知道树莓派有线网卡自动分配到的IP地址,不知道登录到哪儿.以下提供详细操作步骤解决这个问题. 网段扫描法这个是推荐的办法.网段扫描工具很多,推荐一个Advanced ...
- 编译Apache Hadoop2.2.0源代码
Hadoop2的学习资料很少,只有官网的少数文档.如果想更深入的研究hadoop2,除了仅看官网的文档外,还要学习如何看源码,通过不断的调试跟踪源码,学习hadoop的运行机制. 1.安装CentOS ...
- java之并发
一.线程 在java中多线程执行任务,主要有两种方式,一种是通过继承Thread类,重写run方法,优点是比较方便的创建一个线程,缺点是java中每个类只能有一个基类,所有继承了T火热ad类后,就不能 ...
- linux软件的安装,更新与卸载
Linux常见的安装为tar,zip,gz,rpm,deb,bin等.我们可以简单的分为三类. 第一:打包或压缩文件tar,zip,gz等,一般解压后即可,或者解压后运行sh文件: 第二:对应的有管理 ...
- Android 用户界面---拖放(Drag and Drop)(三)
设计拖放操作 本节主要内容如下: 1. 如何开始拖拽: 2. 在拖拽期间如何响应事件: 3. 如何响应落下事件: 4. 如何结束拖放操作. 开始拖拽 用户使用一个拖拽手势开始拖拽,通常是在 ...
- UVa 1593 (水题 STL) Alignment of Code
话说STL的I/O流用的还真不多,就着这道题熟练一下. 用了两个新函数: cout << std::setw(width[j]); 这个是设置输出宽度的,但是默认是在右侧补充空格 所 ...
- mysql 存储过程 事务; mysql的事务中包含一个存储过程
在asp.net结合mysql的开发中,我平时用到的事务处理是 使用 TransactionOptions 来进行处理 TransactionOptions transactionOption = ...
- 最大熵模型 Maximum Entropy Model
熵的概念在统计学习与机器学习中真是很重要,熵的介绍在这里:信息熵 Information Theory .今天的主题是最大熵模型(Maximum Entropy Model,以下简称MaxEnt),M ...