Python数值类型 int、float、complex 详解

Python数值类型:int、float、complex

在Python程序中,int、float和complex是三种十分重要的数值类型,分别代表整数、浮点数和复数。本节将进一步讲解与这三种数据类型相关的其他函数。

1、三种类型的关系

在Python程序中有三种数值类型,分别是整型(integers), 浮点型(floating point numbers), 以及复数(complex numbers)。其中整型拥有准确的精度,浮点型一般是实现C中的double 类型,有关浮点型的精度信息以及其在具体机器中的内部特性信息,可以使用函数sys.float_info()获取。复数类型由一个实数部分(即实部)与一个虚数部分(即虚部)构成,而这两个部分都是浮点型。

Python所有的数值类型(复数除外)都支持表2-1中的操作(按优先级升序排列)(所有数字操作的优先级均高于比较操作)。

表 数值类型操作

操作

结果

x + y

x 和 y 的总和

x - y

x 和 y 的差

x * y

x 和 y 的乘积

x / y

x 和 y 的商

x // y

x 除以y的商向下取整的整数

x % y

求余数 x / y

-x

x 取负

+x

x 保持不变

abs(x)

x的绝对值或x的大小

int(x)

x 转换为整数

float(x)

x 转换为浮点数

complex(re, im)

将参数转化为复数,re为复数的实部,Im为复数的虚部。im 默认为0

c.conjugate()

c 复数的共轭

divmod(x, y)

(x // y, x % y)

pow(x, y)

x 的y 次幂

x ** y

x 的y 次幂

2、整数类型的相关函数

在Python程序中,int类型提供了如下所示的内置函数。

(1)int.bit_length():返回表示二进制整数所需的位数,不包括符号和前置零。

(2)int.to_bytes(length, byteorder, *, signed=False):返回一个表示整数的字节数组。

1.length:数组的长度,如果整数转换出的字节数组长度超过了该长度,则产生OverflowError;

2.byteorder:字节序;值为"big"或者"little","big"表示最有意义的字节放在字节数组的开头,"little"表示最有意义的字节放在字节数组的结尾。在sys.byteorder保存了主机系统的字节序;

3.signed:确定是否使用补码来表示整数,如果值为false且是负数,则产生OverflowError。默认值为False。

(3)int.from_bytes(bytes, byteorder, *, signed=False):返回由给定的字节数组表示的整数。

1.bytes:字节数组或者是一个iterable;

2.byteorder:同函数to_bytes()相同;

3.signed:同函数to_bytes()相同。

例如在下面的实例文件linuxboy.py中,演示了使用整数类型的相关函数的过程。

#使用bit_length()返回表示二进制整数所需的位数,不包括符号和前导零:

n = -37

print(bin(n))

print(n.bit_length())

#使用函数to_bytes()返回一个表示整数的字节数组。

print((1024).to_bytes(2, byteorder='big'))

print((1024).to_bytes(10, byteorder='big'))

print((-1024).to_bytes(10, byteorder='big', signed=True))

x = 1000

print(x.to_bytes((x.bit_length() // 8) + 1, byteorder='little'))

#使用函数from_bytes()返回由给定的字节数组表示的整数。

print(int.from_bytes(b'\x00\x10', byteorder='big'))

print(int.from_bytes(b'\x00\x10', byteorder='little'))

print(int.from_bytes(b'\xfc\x00', byteorder='big', signed=True))

print(int.from_bytes(b'\xfc\x00', byteorder='big', signed=False))

print(int.from_bytes([255, 0, 0], byteorder='big'))

执行后会输出如下:

-0b100101

6

b'\x04\x00'

b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'

b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00'

b'\xe8\x03'

16

4096

-1024

64512

16711680

3、浮点类型的相关函数

在Python程序中,float类型提供了如下所示的内置函数。

(1)float.as_integer_ratio():返回一对整数(2元组),它们的比例准确地等于浮点数的原始值,且分母为正数。无穷会引发ValueError错误,NaNs会引发OverflowError错误。

(2)float.is_integer():如果浮点数实例是整数值,则返回True,否则返回False。

上面的两个方法(as_integer_ratio()和is_integer())都支持与十六进制字符串的相互转换。由于Python的浮点数内部存储为二进制数,浮点数和十进制字符串通之间的相互转化通常会有一个小的舍入误差。与此相反的是,十六进制字符串允许浮点数的精确表示和规格。这在调试时和数值工作中很有用。

(3)float.hex():返回浮点数的十六进制字符串表示形式。对于有限的浮点数,这种表示形式总是包括一个前导的0x和尾部的p及指数。

(4)float.fromhex(s):这是一个类方法,功能是返回由十六进制字符串s表示的float。字符串s可能有前导和尾随空格。读者需要注意,float.hex()是实例方法,而float.fromhex()是一个类方法。

在计算机系统中,十六进制字符串的形式为:

[sign] ['0x'] integer ['.' fraction] ['p' exponent]

可选的exponent可以为“+”或“integer”,“sign”和“fraction”是十六进制数的字符串,“-”是带有可选的前导符号的十进制整数。大小写不敏感,且整数或小数至少有一个十六进制数字。此语法类似于C99 标准的第6.4.4.2节中指明的语法,也类似Java 1.5起使用的语法。float.hex()的输出在C或Java代码中可作为十六进制浮点数的字面值,而且C的Double.toHexString格式的十六进制字符串或Java的%a可以被float.fromhex()接受。在此需要注意的是,指数使用的是十进制数而不是十六进制表示,并且它给出用来乘系数的2的幂。例如,十六进制的字符串0x3.a7p10表示浮点数(3 + 10./16 + 7./162) * 2.010,或3740.0。

例如在下面的实例文件Linuxidc.com.py中,演示了使用浮点类型的相关函数的过程。

print((-2.0).is_integer())

print((3.2).is_integer())

print(float.fromhex('0x3.a7p10'))

print(float.fromhex('0x3.a7p10'))

执行后会输出如下:

True

False

3740.0

3740.0

4  迭代器类型

Python语言支持对容器中的内容进行迭代,允许用户定义的类支持迭代。要想使容器对象支持迭代,需要定义如下所示的方法:

container.__iter__():返回迭代器对象��该对象必须支持如下所述的迭代器协议。如果容器支持不同类型的迭代,可以提供其他方法来专门请求这些迭代类型的迭代器。(对象支持多种迭代形式的一个示例是支持广度和深度优先遍历的树结构)。

Python迭代器对象本身需要支持以下两种方法,它们一起形成迭代器协议。

iterator.__iter__():返回迭代器对象本身,这是必需的,以允许容器和迭代器在for和in语句中使用。

iterator.__next__():从容器中返回下一个元素。如果没有其他元素,则会引发StopIteration异常。

例如在下面的实例文件diq.py中,演示了使用使用类实现__iter__()和next()函数的过程。

class Fib(object):

def __init__(self):

self.a, self.b = 0, 1 # 初始化两个计数器a,b

def __iter__(self):

return self # 实例本身就是迭代对象,故返回自己

def __next__(self):

self.a, self.b = self.b, self.a + self.b # 计算下一个值

if self.a > 10: # 退出循环的条件

raise StopIteration();

return self.a # 返回下一个值

if __name__ == '__main__':

for n in Fib():

print(n)

执行后会输出如下:

1

1

2

3

5

8

https://www.linuxboy.net/topicnews.aspx?tid=17

linuxboy的RSS地址:https://www.linuxboy.net/rssFeed.aspx

本文永久更新链接地址:https://www.linuxboy.net/Linux/2019-04/157901.htm

python数值类型教程_Python数值类型 int、float、complex 详解相关推荐

  1. python属性使用教程_Python对象的属性访问过程详解

    只想回答一个问题: 当编译器要读取obj.field时, 发生了什么? 看似简单的属性访问, 其过程还蛮曲折的. 总共有以下几个step: 1. 如果obj 本身(一个instance )有这个属性, ...

  2. python decimal类型转化_python中的decimal类型转换实例详解

    [Python标准库]decimal--定点数和浮点数的数学运算 作用:使用定点数和浮点数的小数运算. Python 版本:2.4 及以后版本 decimal 模块实现了定点和浮点算术运算符,使用的是 ...

  3. python模拟登录详细教程_Python模拟登录requests.Session应用详解

    最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学 ...

  4. python dataframe loc函数_python pandas.DataFrame.loc函数使用详解

    官方函数 DataFrame.loc Access a group of rows and columns by label(s) or a boolean array. .loc[] is prim ...

  5. python查看模块功能_Python进阶之inspect模块使用详解

    前几篇内容我们详细探讨了如何从Python中获取帮助信息: 前情回顾 1.查看模块.类提供了哪些接口: 需要帮助吗?dir函数的孪生兄弟,Python中魔法方法__dir__详解 2.查看对象内部属性 ...

  6. python中反三角函数用法_Python入门之三角函数atan2()函数详解

    python 的 Python入门之三角函数atan2()函数详解 描述 atan2() 返回给定的 X 及 Y 坐标值的反正切值. 语法 以下是 atan2() 方法的语法: import math ...

  7. python实现排序函数_Python排序函数的使用方法详解

    Python排序函数完美体现了Python语言的简洁性,对于List对象,我们可以直接调用sort()函数(这里称为"方法"更合适)来进行排序,而对于其他可迭代对象(如set,di ...

  8. python find(urlopen.read())_Python小白必看之urlopen()详解

    一.  简介 urllib.request.urlopen()函数用于实现对目标url的访问. 函数原型如下:urllib.request.urlopen(url, data=None, [timeo ...

  9. python中列表数据类型_Python数据类型之List列表实例详解

    本文实例讲述了Python数据类型之List列表.分享给大家供大家参考,具体如下: list列表 1.概述: 通过之前的学习,我们知道变量可以存储数据,但是一个变量只能存储一个数据,现在有一个班级,班 ...

最新文章

  1. Xamarin XAML语言教程基本页面ContentPage占用面积(二)
  2. kibana 报错 server is not ready yet 可能的原因
  3. python3 asyncio 协程模块
  4. C#实现在Winform中嵌入Word和Excel
  5. Outlook 获取联系人名片对象为空
  6. boost::sort模块实现测试并行稳定排序
  7. DevOps运维开发一体化 - 公开课笔记
  8. 编写JUnit测试的另一种方法(Jasmine方法)
  9. workerman json mysql_workerman-json-rpc
  10. Linux 日志系统
  11. Jquery Ajax 请求示例
  12. C# lambda递归
  13. GIS离线地图的下载与发布
  14. 计算机软件编程应聘ppt,[计算机软件及应用]单片机c编程.ppt
  15. 中国数据标注公司排名前十强有哪些?
  16. 把计算机器显示桌面,怎样将电脑显示器和桌面匹配
  17. [Trie]P4551
  18. pandas 如何创建空的DataFrame
  19. MoveIt教程[20]:TRAC-IK Kinematics Solver
  20. 中国银行国内分支机构SWIFT代码

热门文章

  1. Report_SRW在RDF中初始化的重要性(案例)
  2. 乐山计算机学校新歌王,星歌王第二季乐山市计算机学校专场赛决赛完美落幕!...
  3. ghost mysql 乱码,ghost安装之mysql
  4. 基于机器视觉的眼镜镜片轮廓提取
  5. VBA 自动关闭 弹出的对话框 + VBA错误捕捉
  6. 用POLARDB构建客到智能餐饮系统实践
  7. 又见The request sent by the client was syntactically incorrect ()
  8. [产品相关] A/B测试终极指南(翻译)
  9. oracle查看表空间里具体一张表的大小
  10. oracle 表(下)