`

Python之四(数字)

阅读更多

数字提供了标量贮存和直接访问。它是不可更改类型,也就是说变更数字的值会生成新的
对象。当然,这个过程无论对程序员还是对用户都是透明的。

 

Python 支持多种数字类型:整型、长整型、布尔型、双精度浮点型、十进制浮点型和复数。

 

声明一个数字:

anInt = 1

创建数值对象和给变量赋值一样

 

通过给数字对象(重新)赋值, 可以“更新”一个数值对象。因为数值对象是不可改变对象,所谓的“更新”实际上是生成了一个新的数值对象,并得到它的引用。

 

在学习编程的过程中, 我们一直接受这样的教育, 变量就像一个盒子, 里面装着变量的值。在Python 中, 变量更像一个指针指向装变量值的盒子。 对不可改变类型来说, 你无法改变盒子的内容, 但你可以将指针指向一个新盒子。每次将另外的数字赋给变量的时候,实际上创建了一个新的对象并把它赋给变量.(不仅仅是数字,对于所有的不可变类型,都是这么回事)

 

你无法真正删除一个数值对象,你仅仅是不再使用它而已。如果你实际上想删除一个数值对象的引用,使用 del 语句。 删除对象的引用之后,你就不能再使用这个引用(变量名),除非你给它赋一个新值。如果试图使用一个已经被删除的对象引用,会引发NameError 异常。

age = 18
del age
print age

 age被del语句回收了,再次使用age是报NameError

 

Python 有几种整数类型。布尔类型是只有两个值的整型。常规整型是绝大多数现代系统都能识别的整型。Python 也有长整数类型。然而,它表示的数值大小远超过C语言的长整数。

 

布尔值

该类型的取值范围只有两个值,也就是布尔值True和布尔值False。

 

标准整数类型

Python 的标准整数类型是最通用的数字类型。Python 标准整数类型等价于C 的(有符号)长整型。整数一般以十进制表示,但是Python也支持八进制或十六进制来表示整数。如果八进制整数以数字“0”开始,十六进制整数则以“0x” 或“0X”开始。

 

长整型

关于Python 长整数类型我们必须要提的是,请不要将它和C 或其它编译型语言的长整数类型混淆。那些语言的长整数典型的取值范围是32 位或64 位。Python 的长整数类型能表达的数值仅仅与你的机器支持的(虚拟)内存大小有关。

在一个整数值后面加个L(大写或小写都可以,强烈推荐大写),表示这个整数是长整数。这个整数可以是十进制,八进制,或十六进制。

尽管 Python 也支持用小写字母 L 标记的长整型,但是我们郑重推荐您仅使用大写的 “L”,这样能有效避免数字1 和小写L 的混淆。Python 在显示长整数类型数值的时候总是用大写“L ”,目前整型和长整型正在逐渐缓慢的统一,您只有在对长整数调用repr()函数时才有机会看到“L”,如果对长整数对象调用str()函数就看不到 L 。

aaa = 999L
print repr(aaa)   #显示999L
print str(aaa)    #显示999

在Python 2.2 以前,标准整数类型对象超出取值范围会溢出,但是从Python2.2 以后就再也没有这样的错误了。不远的将来,至少普通用户会几乎感觉不到长整型的存在。必要时整型会悄悄自动转换为长整型(PEP237 )。

 

双精度浮点数

Python 中的浮点数类似C 语言中的double 类型,是双精度浮点数,可以用直接的十进制或科学计数法表示。每个浮点数占8 个字节(64 比特)。

 

混合模式运算的类型转换

Python 使用数字类型强制转换的方法来解决运算时数字类型不一致的问题,也就是说它会强制将一个操作数转换为同另一个操作数相同的数据类型。这种操作不是随意进行的,它遵循一个基本规则:整数转换为浮点数,非复数转换为复数。
如果有一个操作数是复数, 另一个操作数被转换为复数。
否则,如果有一个操作数是浮点数, 另一个操作数被转换为浮点数。
否则, 如果有一个操作数是长整数,则另一个操作数被转换为长整数;
否则,两者必然都是普通整数,无须类型转换。(参见下文中的示意图)


 

标准类型的算术运算符

Python 支持单目运算符正号(+)和负号(-), 双目运算符, +,-,*,/,%,还有 ** ,分别表示加法、减法、乘法、除法、取余和幂运算。从Python2.2 起,还增加了一种新的整除运算符 // 。

 

//除法运算

// 除法不管操作数何种数值类型,总是舍去小数部分,返回比真正的商小的最接近的数字,如:5//2(或者5//2.0)返回2,而不是2.5

 

/除法运算

如果是整数除法,返回一个整数(舍小数取整)。如果操作数之一是浮点数,则返回正确的除法结果。如:

5/2返回2,而不是2.5;

5/2.0返回2.5(因为操作数之一是浮点数)

 

如何让5/2返回2.5,而不是2呢?

方法一:在py文件的第一行新增from __future__ import division指令;

方法二:给python解释器新增-Qnew启动参数。默认值是-Qold

 

%取模运算

整数的模运算返回两个操作数相除后的余数,如:5%2返回1

浮点数取模就略复杂些,商取小于等于精确值的最大整数的乘积之差, 即: x - (math.floor(x/y) * y)

复数取模运算类似于浮点数,不同之处在于商仅取其实数部分,即:x - (math.floor((x/y).real) * y)

 

常用的处理数字类型的内建函数

int(), long(), float() ,bool()和 complex() 用来将其它数值类型转换为相应的数值类型。

所有这些内建函数现在都转变为工厂函数。所谓工厂函数就是指这些内建函数都是类对象,当你调用它们时,实际上是创建了一个类实例。不过,这些函数的使用方法并没有什么改变。如:

int('100')返回100;

int(4.2)返回4;

bool(1)返回True

 

类(工厂函数) 操作
bool(obj) 返回obj对象的布尔值,也就是obj.__nonzero__()方法的返回值
int(obj, base=10) 返回一个字符串或数值对象的整数表示,类似string.atoi()方法
long(obj, base=10) 返回一个字符或数据对象的长整数表示,类似string.atol()方法
float(obj) 返回一个字符串或数据对象的浮点数表示,类似string.atof()方法
complex(str) 或者 complex(real, imag=0.0) 返回一个字符串的复数表示,或者根据给定的实数(及一个可选的虚数部分)生成一个复数对象。

 

常用的功能函数

函数 功能
abs(num) 返回 num 的绝对值
coerce(num1, num2) 将num1和num2转换为同一类型,然后以一个元组的形式返回
divmod(num1, num2) 除法-取余运算的结合。返回一个元组(num1/num2,num1 % num2)。对浮点数和复数的商进行下舍入(复数仅取实数部分的商)
pow(num1, num2, mod=1) 取 num1 的 num2次方,如果提供 mod参数,则计算结果再对mod进行取余运算
round(flt, ndig=0) 接受一个浮点数 flt 并对其四舍五入,保存 ndig位小数。若不提供ndig 参数,则默认小数点后0位

 

仅用于整数的函数

函数 功能
hex(num) 将数字转换成十六进制数并以字符串形式返回
oct(num) 将数字转换成八进制数并以字符串形式返回
chr(num) 将ASCII值的数字转换成ASCII字符,范围只能是0 <= num <= 255
ord(chr) 接受一个 ASCII 或 Unicode 字符(长度为1的字符串),返回相应的ASCII或Unicode 值
unichr(num) 接受Unicode码值,返回 其对应的Unicode字符。所接受的码值范围依赖于你的Python是构建于UCS-2还是UCS-4

 

布尔数

从Python2.3 开始,布尔类型添加到了Python 中来。尽管布尔值看上去是“True” 和“False,但是事实上是整型的子类,对应与整数的1 和0。下面是有关布尔类型的主要概念:

  • 有两个永不改变的值 True 或False。
  • 布尔型是整型的子类,但是不能再被继承而生成它的子类。
  • 没有__nonzero__()方法的对象的默认值是 True。
  • 对于值为零的任何数字或空集(空列表、空元组和空字典等)在Python 中的布尔值都是False。
  • 在数学运算中,Boolean 值的True 和False 分别对应于1 和 0。
  • 以前返回整数的大部分标准库函数和内建布尔型函数现在返回布尔型。
  • True 和False 现在都不是关键字,但是在Python 将来的版本中会是。

使用decimal 模块

from decimal import Decimal

aa = Decimal('0.1')
print aa + 2

 输出2.1

 

数字类型相关模块

模块 介绍
decimal 十进制浮点运算类 Decimal
array 高效数值数组(字符,整数,浮点数等等)
math/cmath 标准C库数学运算函数。常规数学运算在match模块,复数运算在cmath模块
operator 数字运算符的函数实现。比如 tor.sub(m,n)等价于 m - n
random

多种伪随机数生成器

 

核心模块: random

当你的程序需要随机数功能时,random 模块就能派上用场。该模块包含多个伪随机数发生器,它们均以当前的时间戳为随机数种子。这样只要载入这个模块就能随时开始工作。下面列出了该模块中最常用的函数:
randrange()

返回两个整数之间的随机整数,它接受和 range() 函数一样的参数, 随机返回range([start,]stop[,step])结果的一项
uniform()

几乎和 randint()一样,不过它返回的是二者之间的一个浮点数(不包括范围上限)。
random()

类似 uniform() 只不过下限恒等于0.0,上限恒等于1.0
choice()

随机返回给定序列的一个元素

 

参考资料:

Python核心编程(第二版) 人民邮电出版社

 

 

  • 大小: 45.5 KB
分享到:
评论

相关推荐

    基于python的数字信封,含加密和解密功能.zip

    基于python的数字信封,含加密和解密功能.zip基于python的数字信封,含加密和解密功能.zip基于python的数字信封,含加密和解密功能.zip基于python的数字信封,含加密和解密功能.zip基于python的数字信封,含加密和...

    python虚拟数字人控制器

    本项目可以充当时下流行的虚拟人、虚拟主播、数字人,等仿人形数字形象的内核部分。 ​ 使用UE、C4D、DAZ、LIVE2D等三维引擎软件开发的数字形象可以与本“数字人控制器”对接,从而实现虚拟主播、数字导游、数字助手...

    (纯算法,没有调用库)python实现RSA数字签名代码、ppt、文档.rar

    在这个资源包中,包含的是使用Python纯算法实现RSA数字签名的代码、相关的PPT演示文稿以及文档,这些内容将帮助我们深入理解RSA数字签名的工作原理和实现过程。 1. **RSA算法基础** RSA算法基于大数因子分解的困难...

    基于Python实现的手写数字识别系统.zip

    使用 Python 实现对手写数字的识别工作,通过使用 windows 上的画图软件绘制一个大小是 28x28 像素的数字图像,图像的背景色是黑色,数字的颜色是白色,将该绘制的图像作为输入,经过训练好的模型识别所画的数字。...

    Python之手写数字识别

    Python之手写数字识别

    Python 如何生成包含字母和数字的图片验证码 Python源码

    Python 如何生成包含字母和数字的图片验证码 Python源码Python 如何生成包含字母和数字的图片验证码 Python源码Python 如何生成包含字母和数字的图片验证码 Python源码Python 如何生成包含字母和数字的图片验证码 ...

    基于Python实现手写数字识别【100012586】

    大学毕业设计题目,手写数字识别 需安装Python3.X 64bit相关版本、Tensorflow 1.x相关版本 IDE建议使用Pycharm 打开main.py,运行即可。 文旨在通过使用 Google 研发的 Tensorflow 人工智能框架,分别搭建 Softmax ...

    Python实现把数字转换成中文

    周末在家,写了个小程序,用于将阿拉伯数字转换化大写中文。程序没经过任何优化,出没经过详细的测试,挂到网上,方便将来有需要的时候直接拿来用。 #!/usr/bin/python #-*- encoding: utf-8 -*- import types ...

    Python大作业:基于Python的数字图像识别

    Python大作业:基于Python的数字图像识别;Python大作业:基于Python的数字图像识别;Python大作业:基于Python的数字图像识别;Python大作业:基于Python的数字图像识别;Python大作业:基于Python的数字图像识别;...

    python 实现的数字积分法DDA圆弧插补 圆心位置任意 步长任意

    python 实现的数字积分法DDA圆弧插补 圆心位置任意 步长任意 解算后绘图

    Python Tkinter——数字拼图游戏配套图片

    在这个特定的场景中,"Python Tkinter——数字拼图游戏配套图片"指的是使用Tkinter库来开发的一个数字拼图游戏,游戏中的图像资源可能包含在提供的压缩包文件中。 数字拼图游戏通常是一个益智游戏,玩家需要将打乱...

    信用卡数字识别Python

    【信用卡数字识别Python】是一个利用OpenCV库进行图像处理,并结合模式识别技术的Python项目,旨在帮助用户自动识别信用卡上的数字。这个项目非常适合初学者学习,因为它提供了清晰的注释和逐步指导,使得理解图像...

    基于Python语言的数字万用表自动校准系统的研究.pdf

    在本系统中,使用了四个主要的Python工具包来实现数字万用表的自动校准: 1. PyVISA工具包:通过该工具包,软件能够控制标准器和数字万用表,实现通讯、数据采集和设备控制。 2. Python的面向对象封装:将VISA...

    Python简单猜数字游戏(无重复数字)

    python 3.3.0版本 简单的猜数字游戏,需要优化,希望得到指点!谢谢!

    Python 使用Python制作简易数字累加器 Python源码

    Python 使用Python制作简易数字累加器 Python源码Python 使用Python制作简易数字累加器 Python源码Python 使用Python制作简易数字累加器 Python源码Python 使用Python制作简易数字累加器 Python源码Python 使用...

    基于小波变换的数字水印方法_python_数字水印python_数字水印python_水印_小波变换

    本主题聚焦于使用Python编程语言实现基于小波变换的数字水印算法,旨在探讨如何在图像中嵌入和提取水印信息,同时增强其对抗攻击的能力。 小波变换是一种多分辨率分析工具,能对信号进行时频局部化分析,适用于图像...

    猜数字游戏python

    简单的一个python小程序,挺有意思的

    python图形数字水印和添加水印后的jpeg攻击,裁剪攻击,噪声攻击。

    Python作为一种功能强大的编程语言,提供了许多库来实现数字水印的添加和处理。在这个资源分享中,我们将探讨如何使用Python进行图形数字水印的添加以及针对水印的几种攻击方式,包括JPEG攻击、裁剪攻击和噪声攻击。...

    手写数字识别(python底层实现)报告.docx

    **四、Python实现** 在Python中,实现多层感知机需要定义网络结构(包括输入层、隐藏层和输出层)、损失函数、优化器(如随机梯度下降SGD)以及训练循环。在编写代码时,添加注释有助于他人理解代码逻辑,提高代码的...

Global site tag (gtag.js) - Google Analytics