python 内置数据类型之数字

摘要:
整数和浮点复数十进制有理小数集,具有固定精度布尔值无限整数精度各种数字内置函数和模块表1:2**3.1浮点(C语言中的双精度)十进制。小数(‘.1')小数(由模块实现)小数(1,表达式生成匿名函数xifylesz三元选择表达式xory逻辑或(y仅在x为假时计算)xady逻辑和(y仅当x为真时计算)。

目录:

 

1.2 数字

 

1.2.1 数字类型

python 内置可以处理大部分常见的数字类型,比如整数,浮点数。 还有一些模块包括更高级的数学工具。第三方开源扩展领域还包含了更多的类型(矩阵生向量).

python数字类型包含:

  • 整数与浮点数
  • 复数
  • 固定精度的十进制
  • 有理分数
  • 集合
  • 布尔
  • 无穷的整数精度
  • 各种数字内置函数和模块
Table 1: 基本数字常量
常量类型
1234整数
1.,.1 , 3.14e+210,4E210, 2 ** 3.1浮点数(采用C语言的双精度)
decimal.Decimal('.1')小数(通过模块实现)
Fraction(1,3)分数(通过模块实现)
0123, 0x111,0b101010python2.6中的八进制,十六进制,二进制
0o123,0x111,0b101010python3.0中的八进制,十六进制,二进制
3+4j,3.0+4.0j,3J复数
Table 2: 表达式操作符及程序
操作符描述
yield x生成器函数发送协议
lambda args: expression生成匿名函数
x if y else z三元选择表达式
x or y逻辑或(只有x 为假时才会计算y)
x and y逻辑与(只有x为真才会计算y,并且要求y为真)
not x逻辑非
x in y, x not in y成员关系 (可迭代对象,集合)
x is y,x is not y对象实体测试
<,<=,>,>=,==,!=比较
x | y位或,集合并集
x^y位异或,集合对称差
x&y位与,集合交集
x < <y, x>>y左移或者右移Y位
x+y,x-y加(合并),减,集合差集
x*y,x%y,x/y,x//y相乘,求余数,除法,floor 除法(取相临的最小整数)
-x,+x一元减法,识别
~x按位求补(取反)
x**y幂运算
x[i]索引(序列、映射及其他)点号取属性运算,函数调用
x[i:j:k]分片
x(….)调用函数、方法类及其他可调用的)
x.attr属性引用
(….)元组
[…]列表,列表解析
{…}字典,集合 ,字典和集合解析
note 
  • 运算符优化级,在Table2表格中,越靠后优先级越高。
  • 同一行表达式,在组全的时候通常从左至右顺序运算。(幂运算是从右向左运算的)
  • 括号可以改变优先级,像数学一样,会先运算括号内的部分
  • / (除号),在python2.6 中,只保留整数部分,在python3.0中会保留小数部分

1.2.2 浮点数

一般来讲,浮点数是带有小数点的数。比如1. , .5 ,2. ** 3. 都是浮点数。浮点数的对比和计算是不精确的,原因是 内存结构中允许存储的最长位置与浮点数之间的二进制表示方式之间的冲突与矛盾。由于这固有的限制,使得浮点数进行 计算时会不精确。因此不推荐使用浮点数进行计算。

1.2.3 进制记数

本节进制转换只适用于整数。

  • 常数 在python3.0 中,其他进制都以前0+字母开头,
     二进制八进制十六进制
    进制标记0b0o0x
    示例0b010100o2220x169
  • 十进制与其他进制转换
    • 进制转换通过内置函数实现,以十进制数字10为示例:
      Table 3: 十进制转换其他进制函数
      转换为二进制八进制十六进制
       bin(10)oct(10)hex(10)
      十进制int('1010',2)int('12',8)int('a',16)
       int('0b1010',2)int('0o12',8)int('0xa',16)

      这些内置置换函数,实际是英文的缩写:

      Table 4: 进制函数英文
      函数英文中文
      binbinary二进制的
      octoctal八进制的
      hexhexadecimal十六进制
    • 通过字符串格式化方法转换
      >>> '{0:o},{1:x},{2:b}'.format(10,10,10)
      '12,a,1010'
      >>> '%o,%x' %(10,10)
      '12,a'
      

      注意 通过 '%' 进行格式化时不支持二进制。

1.2.4 设置小数精度

设置小数精度,这里主要了解通过decimal模块来设置,可以设置全局小数精度,也可以设置局部小数精度。 使用的是该模块中的getcontext().pre 来实现,使用这种方法,数字应以Decimal格式。普通的整数格式不受限制。

  • 全局设置

示例如下:

>>> import decimal
>>> 1/7
0.14285714285714285
>>> decimal.getcontext().prec = 4
>>> 1/7
0.14285714285714285
>>> decimal.Decimal(1)/decimal.Decimal(7)
Decimal('0.1429')
  • 局部设置

局部设置小数精度,需要通过with语句来实现。示例如下:

>>> import decimal
>>> 1/7
0.14285714285714285
>>> decimal.getcontext().prec = 4
>>> 1/7
0.14285714285714285
>>> decimal.Decimal(1)/decimal.Decimal(7)
Decimal('0.1429')
>>> with decimal.localcontext() as lctx :
...     lctx.prec=2
...     decimal.Decimal('1') / decimal.Decimal('7')
... 
Decimal('0.14')
>>> decimal.Decimal(1) / decimal.Decimal(7)
Decimal('0.1429')
>>>

1.2.5 分数

分数的实现,主要是通过模块fraction来实现。分数的存在避免了浮点数的某些不精确性和局限性。 下面是分数使用示例

>>> from fractions import Fraction
>>> x=Fraction(1,3)
>>> x
Fraction(1, 3)
>>> print(x)
1/3
>>> y=Fraction(2,3)
>>> x+y
Fraction(1, 1)
>>> print(x+y)
1
>>>

1.2.6 除法

python 中,包含了传统除尘与真除法(是否保留小数),floor除法。 x/y, 传统除法与真除法都是这种写法。区别在于在python3 之前表示传统除法,python3 中表示真除法。传统除法,整数相除的 结果保留整数,浮点数相除的结果保留小数部分。真除法中,数值相除结果始终保留小数。 x//y , 这种表示方法为floor除法,相除的结果,如果是小数,会取与小数相近的最小整数。

免责声明:文章转载自《python 内置数据类型之数字》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇AD与LDAP区别vim学习3-《Vim实用技巧》下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MyBatis-使用XML或注解的简单实例

一.导入jar包 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</ver...

Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

原文:http://czjxdm.iteye.com/blog/466948 Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法 博客分类:技术文章 OracleSQL  怎么合并多行记录的字符串,一直是oracle新手喜欢问的SQL问题之一,关于这个问题的帖子我看过不下30个了,现在就对这个问题,进行一个总结。    什么是合并多...

使用bcrypt对数据加密

使用bcrypt对数据加密 ​ 这是一篇随笔,用于记录在项目中用到一个比较的你npm包。这个包之所以这个货因为他的安全系数比以前用到的类似于md5,sha1要高,因为bcrypt加密,同样一个值,你每次加密出来的值是不一样的。原来的md5加密就做不到这一点。好了废话不多说,如果对bcrypt的算法感兴趣的话,大佬们可以去研究一下。下面我们来讲讲他的使用方法...

jstat命令使用

jstat命令使用 jstat是JDK自带的一个轻量级小工具,全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。 命令格式 ➜ ~ jstat -...

MFC 多线程

MFC对多线程编程的支持   MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息   队列和消息循环。   工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独   立于其他线程执行之外的用户输入,响应用户及系统所产...

layui中,同一个页面动态加载table数据表格

效果图: 前端代码: <div class="layui-fluid" id="record-user" hidden="hidden"> <div class="layui-card"> <div class="layui-form" lay-filter="datafile">...