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_数字和运算的更多相关文章

  1. python学习之数字

    数字python中的数字比较典型,典型在可以表示很小的数,也可以表示很大的数,c语言的数字类型如果表示很大的数的话,可能会报溢出错误,但是python不会,python 数字类型的完整工具包括整数和浮 ...

  2. Python学习笔记---数 数据类型 运算

    python的四种数类型: 整数 int 浮点型 float 布尔 boolen 复数 complex >>> type(5)<class 'int'>>>& ...

  3. Mooc中国大学Python学习笔记--数字类型及操作

    整数类型 只需知道整数无限制,pow(),4进制表示形式 与数学中整数的概念一致 --可正可负,没有取值范限制 --pow(x,y)函数:计算x^y,想算多大算多大 -十进制:10 -二进制,以0b或 ...

  4. python学习之数据类型与运算符号

    python版本:3.6 python编辑器:pycharm 最新版本 整理成代码如下: #!/usr/bin/env python #-*- coding: utf-8 -*- # 数学操作符 pr ...

  5. Python学习笔记-数字,列表,元祖,切片,循环

    数字 1,加减乘除:+,-,*,/ 2,平方:** 3,立方:**3 4,字符串转换:str(数字) 5,浮点数:带小数点  0.2 Python编程建议 import this >>&g ...

  6. Python学习之--数字转人民币读法(解决问题的方法很重要)

    效果图: 实现代码: money = float(input("Please input the money:"))cop = int(money)Num = ['零','壹',' ...

  7. [Python学习笔记] 数字类型及操作

    数字类型 整数类型 十进制:1110,-123 二进制:以0B或0b开头 0b110,-0B101 八进制:以0O或0o开头 0o123,-0O567 十六进制:以0X或0x开头 0x555,-0X8 ...

  8. Python学习笔记-数字类型

    如何定义一个数字类型 定义var1为一个INT类型,所以在5/3 输出的是 1. var1 = 5 var1=var1/3 print var1 定义var1为一个INT类型,因为var1是INT类型 ...

  9. Python学习-猜数字游戏

    菩萨蛮·黄鹤楼 茫茫九派流中国,沉沉一线穿南北.烟雨莽苍苍,龟蛇锁大江. 黄鹤知何去,剩有游人处.把酒酹滔滔,心潮逐浪高! --coding:UTF-8-- import random secret ...

随机推荐

  1. ssh服务、密钥登陆配置

    环境内核信息: [root@zabbix-01 ~]# uname -a Linux lodboyedu-01 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:2 ...

  2. Model中内部类meta详解

    Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性. 以下对此作一总结: Model 元数据就是 "不是一个字段的任何数据" -- 比如排序选项 ...

  3. 学习vi和vim编辑器(5):越过基础的藩篱

    本章将对之前学习的编辑命令如" c "." d "." y "等命令进行总结,并学习一些新的知识:其它进入vi的方法,利用缓冲区来存储拖曳或 ...

  4. SDL2源码分析2:窗体(SDL_Window)

    ===================================================== SDL源码分析系列文章列表: SDL2源码分析1:初始化(SDL_Init()) SDL2源 ...

  5. 解决PL/SQL Developer 连接oracle 11g 64位中的问题

    1.错误1:Initialization error could not initialize 电脑上原本就装有oracle 11g 64位,但是PL/SQL却怎么也连接不上,报出" Ini ...

  6. F01:金融学第一定律:时间的价值

    很小的时候,我们就听大人们讲过:时间就是金钱. 长大了,也觉得这句话应该是对的.我们很珍惜时间,但是似乎没有看到金钱的急剧增加啊.总之,这是模糊,体验感又不强的一句话. 既然谈到时间的价值,价值最容易 ...

  7. 自学Zabbix3.5.6-监控项item-Value mapping值映射

    zabbix为了显示更人性化的数据,在使用过程中,我们可以将获取到得数据映射为一个字符串.比如,我们写脚本监控MySQL是否在运行中, 一般返回0表示数据库挂了,1表示数据库正常,还有各种各样的监控都 ...

  8. android studio 使用adb命令传递文件到android设备

    一:文件传输 在android开发中,有时候需要将文件从pc端传递至android,或者将软件运行的日志,从android设备传递到pc进行分析,我们可以使用windows的cmd窗口,或者andro ...

  9. Not++规范格式(格式化)

    Notepad++功能比Windows中的 Notepad(记事本)强大,除了可以用来制作一般的纯文字说明文件,也十分适合编写计算机程序代码.Notepad++ 有语法高亮度显示和语法折叠功能,并且支 ...

  10. Asynchronous vs synchronous client applications(MQTT)

    来自我的CSDN博客   想查看英文原文的请点击原文网址.在上两篇翻译中,Homejim我给大家分别翻译了同步客户端应用程序和异步客户端应用程序.本人对这两个的区别也有困惑,因此将paho下的这个比较 ...