Python学习_02_数字和运算
python具有强大的科学运算功能,python由于支持更加强大的面向对象和动态特性,相比R语言、matlab、mathmatic等传统的科学计算工具具有非常大的优势。
Python的数字
python中的数字提供了标量的存储和直接访问,并且是不可更改的类型,对数字的更改实际上是创建了一个新的数字对象,而原来的数字对象当其引用次数为0时,会被垃圾回收机制回收,通过del 关键字可以删除一个对象的引用。
布尔类型:在python2.3之后开始支持,布尔类型只有两个值:True和False。
整形、长整形:python中的整形大小取决于系统的数据带宽,如32系统最大支持2^32-1,和C语言中的长整形类似,而python中的长整形则取决于运行机器的虚拟内存。python的长整形后面会有L标识,在python2.2之后,python的长整形和整形逐渐统一为一种,并且能够自动转换。
浮点型:python中的浮点型类似于C语言中的double,是双精度浮点型,每个浮点型占8个字节(64位),并且遵守IEEE754号规范:52M/11E/1S,52个位用于表示底,11位用于表示指数,一个位用于表示符号。根据运行的机器不同可能会有所不同。
复数类型:python中内建有复数的类型,一个复数表示为real+imagj的形式,虚数的部分必须有后缀j或者J,虚数不能单独存在,他总是和一个值为0.0的实数部分一起构成一个复数。复数的实数和虚数部分都是浮点类型。复数包含两个内建属性和一个内建方法:num.real、num.imag、num.conjugate(),其中conjugate()方法返回该复数的共轭复数。
python的操作符
python的操作符工作时,必须保证两个操作数是同一类型,如果不是同一类型,则会按照以下的逻辑进行转换:
1.如果有一个操作数是复数,则另外一个操作数也转换为复数
2.否则,如果一个操作数是浮点型,则另外一个操作数也转换为浮点型
3.否则,如果一个操作数是长整形,则另外一个操作数也转换为长整形
4.否则,两者都是普通整形,无需转换
python中+、-、*、/、%等和其他语言无异,实际上就是实现__add__(),__sub__(),__mul__(),__div__()等方法。python中的幂操作符为**,并且添加了新的整除操作: // 。为了科学计算的需要,python的除法也分为好几种:
1.传统除法:当两个操作数都是整数时,执行整数除法,返回一个整形,如果其中之一是浮点数,按照转换逻辑另外一个操作数也是或者被转换为浮点数,执行浮点除法。这个规则在python3之后有所改变,在python3中,不论两个操作数是否都是整形,都将执行真正的除法,而原来的整数除法需要利用地板除操作:// 来完成。
2.真正的除法:在python3之后,/ 操作符将执行真正的除法,而在python2中,如果想要运行真正的除法,则需要通过执行 from __future__ import division指令来做到这一点。
3.地板除:操作符 // 执行一个地板除操作,不论操作数是何种类型,都将舍去小数部分,返回数字序列中比真正的商小的最接近的数字。
取余操作中,如果操作数是浮点型,商取小于等于精确值的最大整形的乘积之差(书上原话,有点拗口,不太理解):

而幂操作等操作符,以及各操作符之间的优先级,和数学中的习惯都是一致的。
python同时还具有位操作符:~、&、|、^、<<、>>等,用于支持二进制运算。
数值运算的内建函数
1.工厂函数:由于python对类和类型的整合,python中的数值类型转换函数就是对应类的工厂函数。当调用float()函数将一个整数转换为浮点型时,实际上的工作是创建一个float类的实力对象。
2.功能函数:abs()、coerce()、divmod()、pow()、round()等:
abs():返回给定参数的绝对值,如果是复数,则返回距离原点的距离。
coerce():将传入的参数按照转换逻辑转换成统一的类型,并返回转换完毕的两个数值的元组。
divmod():除法和取余的结合,返回一个元组,包括商和余数。
pow():pow()函数进行指数运算,并且可以接受第三个参数做取余操作,pow(x,y,z)的效率会比pow(x,y)%z的效率要高,在密码运算中这个特性会被用到。
round():按照四舍五入的规则进行取整。python2和python3的规则似乎有点不同:


以上左图使用python3的idle运行结果,右图使用python2.7.9在脚本中执行结果,由于没有安装python2的idle,暂时不做细究。
对比round(),int()函数直接截去小数部分,floor()函数则返回最接近原数但是小于原数的整形。
python针对整形提供转换函数:hex()、oct()、ord()、chr()、unichr()分别返回十六进制整形、八进制整形、给定字符的ASCII码、给定ASCII码的字符、给定Unicode码的字符
工厂函数其实就是__init__()方法的调用
Python中的布尔数
python中的布尔数是整形的子类,True和False对应于整形的1和0,python中的布尔型具有以下特点:
1.有两个永不改变的值:True和False
2.布尔型是整形的子类,但是不能再被继承而生成他的子类
3.没有__nonzero__()方法的对象默认是True
4.对于值为零的任何数字或空集:空列表、空元组、空字典等的布尔值都是False
5.可以进行数学运算,且在运算中对应整数1和0
取一个对象的布尔值实际上是执行该对象的__nonzero()__方法,若该对象没有__nonzero()__方法,如:
class C: pass
c = C()
c是通过工厂函数创建的C类的一个实例 ,在C类中并没有__nonzero()__方法,所以bool(c)返回True值,由于Class类也没有__nonzero()__方法,所以bool(C)同样返回True值。
十进制浮点型
在python2.4之前,由于浮点型遵循的IEEE754规范,显示的时候使用二进制52位表示底,一些简单的十进制浮点型,比如0.1在二进制浮点型中将显示为0.10000000001或者0.9999999999等,在python2.4之后,十进制浮点型成为python的特性,但是在做浮点型取余操作时,任然会出现类似的问题,尽管加入Decimal类也不能解决:

相关模块
针对科学计算的模块NumPy、SciPy包含很多高级的数字科学计算内容,一些其他的数字相关模块,如decimal、array、math/cmath、operator、random等模块对数字计算进行扩展。
random模块中包含多个伪随机数的发生器:
randint():在两个整形参数中返回二者之间的随机整形
randrange():随机返回range([start,]stop[,step])结果中的一项,如randrange(1,10,2)
uniform():和randint类似,但是返回二者之间的浮点数(开区间)
random():类似于uniform,但是上限恒等于1.0,下限恒等于0.0
choice():随机返回给定序列的一个元素。
Python学习_02_数字和运算的更多相关文章
- python学习之数字
数字python中的数字比较典型,典型在可以表示很小的数,也可以表示很大的数,c语言的数字类型如果表示很大的数的话,可能会报溢出错误,但是python不会,python 数字类型的完整工具包括整数和浮 ...
- Python学习笔记---数 数据类型 运算
python的四种数类型: 整数 int 浮点型 float 布尔 boolen 复数 complex >>> type(5)<class 'int'>>>& ...
- Mooc中国大学Python学习笔记--数字类型及操作
整数类型 只需知道整数无限制,pow(),4进制表示形式 与数学中整数的概念一致 --可正可负,没有取值范限制 --pow(x,y)函数:计算x^y,想算多大算多大 -十进制:10 -二进制,以0b或 ...
- python学习之数据类型与运算符号
python版本:3.6 python编辑器:pycharm 最新版本 整理成代码如下: #!/usr/bin/env python #-*- coding: utf-8 -*- # 数学操作符 pr ...
- Python学习笔记-数字,列表,元祖,切片,循环
数字 1,加减乘除:+,-,*,/ 2,平方:** 3,立方:**3 4,字符串转换:str(数字) 5,浮点数:带小数点 0.2 Python编程建议 import this >>&g ...
- Python学习之--数字转人民币读法(解决问题的方法很重要)
效果图: 实现代码: money = float(input("Please input the money:"))cop = int(money)Num = ['零','壹',' ...
- [Python学习笔记] 数字类型及操作
数字类型 整数类型 十进制:1110,-123 二进制:以0B或0b开头 0b110,-0B101 八进制:以0O或0o开头 0o123,-0O567 十六进制:以0X或0x开头 0x555,-0X8 ...
- Python学习笔记-数字类型
如何定义一个数字类型 定义var1为一个INT类型,所以在5/3 输出的是 1. var1 = 5 var1=var1/3 print var1 定义var1为一个INT类型,因为var1是INT类型 ...
- Python学习-猜数字游戏
菩萨蛮·黄鹤楼 茫茫九派流中国,沉沉一线穿南北.烟雨莽苍苍,龟蛇锁大江. 黄鹤知何去,剩有游人处.把酒酹滔滔,心潮逐浪高! --coding:UTF-8-- import random secret ...
随机推荐
- PHP基础知识点
//语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出. /* [命名规则] */常量名 类常量建议全大写,单词间用下划线分隔 // MIN_WIDTH变量名建议用 ...
- Scala入门系列(七):面向对象之继承
extends 与Java一样,也是使用extends关键字,使用继承可以有效复用代码 class Person { private var name = "leo" def ge ...
- haproxy,tomcat.apache记录用户真实IP
Haproxy配置: default加入: option httpclose option forwardfor Tomcat配置: server.xml中添加 prefix="localh ...
- 1.5 sleep()方法
方法sleep()的作用是在指定的毫秒数内让当前"正在执行的线程"休眠(暂停执行).这个"正在执行的线程"是指this.currentThread()返回的线程 ...
- 处理eclipse启动时报java.lang.IllegalStateException
这是我写的第一篇博客,博客我来了: 我是好学的人,希望在这上面遇到志同道合的人,对技术有更高追求的人: 重启eclipse的时候报出来 An error has occurred, See the l ...
- H5混合开发二维码扫描以及调用本地摄像头
今天主管给了我个需求,说要用混合开发,用H5调用本地摄像头进行扫描二维码,我之前有做过原生安卓的二维码扫一扫,主要是通过调用zxing插件进行操作的,其中还弄了个闪光灯.但是纯H5的没接触过,心里没底 ...
- 不用分支语句实现1+2+。。。+n
要求: 不使用乘除法.for.while .if.else.switch.case.以及A?B:C三元表达式 求1+2+3+...+n 此题思路有多种,能够用多态.构造函数.递归.和模板元. 我在看到 ...
- Linux性能及调优指南(翻译)之Linux进程管理
本文为IBM RedBook的Linux Performanceand Tuning Guidelines的1.1节的翻译原文地址:http://www.redbooks.ibm.com/redpap ...
- HTML学习笔记之三(localstorage的使用)
localstorage的使用 1.获取对象 var localstroage = window.localStorage; 2.存储值 localstroage.setItem('openid',' ...
- 如何处理使用js兼容所有浏览器的问题
首先:如何处理兼容问题 1.如果两个都是属性,用逻辑||做兼容 2.如果有一个是方法,用三元做兼容 3.如果是多个属性或方法,封装函数做兼容 分享两个小知识点: 1.取消拖拽的默认行为: docume ...