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 ...
随机推荐
- SpringCloud高可用Eureka搭建
网上很多博客写的都是在本地一台机器上面搭建的,我用两台机器来为大家搭建一个注册中心高可用集群 第一步:需要在每一台机器上面搭建一个注册中心. 第二步:编写第一台机器注册中心配置文件 第三步:编写第二台 ...
- APP端的网络优化(DNS优化,HTTP优化)
一.使用httpDNS优化DNS解析和缓存 一般来说在App内用域名发送请求都要经过DNS解析出ip,然后再根据ip去拿对应的资源,这个过程中,如果LocalDNS中存在这个域名对应的ip,就会直接返 ...
- Python入门经典 以解决计算问题为导向的Python编程 待完好
1.4.2:python将代码分为两类:表达式和语句 表达式和语句:: 表达式(值和运算符的结合,将产生新值--返回值. 假设在python shell中输入表达式将显示返回值.也就是说,假设x的 ...
- 4、libgdx应用框架
(原文:http://www.libgdx.cn/topic/29/4-libgdx%E5%BA%94%E7%94%A8%E6%A1%86%E6%9E%B6) 模块 作为核心.libgdx提供了六个接 ...
- myeclipse tomcat java.lang.OutOfMemoryError: PermGen space错误的解决方法
错误代码: java.lang.OutOfMemoryError: PermGen space 原因分析: myeclipse或tomcat的内容分配的不够用,启动失败 解决方法: 1.找到tomca ...
- 牛腩新闻公布系统--学习Web的小技巧汇总
2014年11月10日,是个难忘的日子.这一天.小编的BS学习開始了.BS的开头,从牛腩新闻公布系统開始.之前学习的内容都是CS方面的知识,软考过后.開始学习BS,接触BS有几天的时间了,跟着牛腩老师 ...
- JAVA入门[20]-Spring Data JPA简单示例
Spring 对 JPA 的支持已经非常强大,开发者只需关心核心业务逻辑的实现代码,无需过多关注 EntityManager 的创建.事务处理等 JPA 相关的处理.Spring Data JPA更是 ...
- C#基础知识 简单说明泛型的优点
有关泛型的优缺点在网上有很多篇文章,也足以说明问题,我就不去复制粘贴了(而且内容有些多),由于记性不太好,所以自己做个简单明了的总结. 泛型的优点主要有两个: "性能" " ...
- Linux基础:文件查找find
写在前面 在linux的日常管理中,find的使用频率很高,熟练掌握对提高工作效率很有帮助. find的语法比较简单,常用参数的就那么几个,比如-name.-type.-ctime等.初学的同学直接看 ...
- iOS白名单设置
在做分享.支付的时候需要跳转到对应的app,这里有需要设置的白名单列表<key>LSApplicationQueriesSchemes</key> <array> ...