问题

I noticed that in python there are two similar looking methods for finding the absolute value of a number:

First

abs(-5)

Second

import math

math.fabs(-5)

How do these methods differ?

回答1:

math.fabs() converts its argument to float if it can (if it can't, it throws an exception). It then takes the absolute value, and returns the result as a float.

In addition to floats, abs() also works with integers and complex numbers. Its return type depends on the type of its argument.

In [7]: type(abs(-2))

Out[7]: int

In [8]: type(abs(-2.0))

Out[8]: float

In [9]: type(abs(3+4j))

Out[9]: float

In [10]: type(math.fabs(-2))

Out[10]: float

In [11]: type(math.fabs(-2.0))

Out[11]: float

In [12]: type(math.fabs(3+4j))

---------------------------------------------------------------------------

TypeError Traceback (most recent call last)

/home/alexei/ in ()

----> 1 type(math.fabs(3+4j))

TypeError: can't convert complex to float

回答2:

Edit: as @aix suggested, a better (more fair) way to compare the speed difference:

In [1]: %timeit abs(5)

10000000 loops, best of 3: 86.5 ns per loop

In [2]: from math import fabs

In [3]: %timeit fabs(5)

10000000 loops, best of 3: 115 ns per loop

In [4]: %timeit abs(-5)

10000000 loops, best of 3: 88.3 ns per loop

In [5]: %timeit fabs(-5)

10000000 loops, best of 3: 114 ns per loop

In [6]: %timeit abs(5.0)

10000000 loops, best of 3: 92.5 ns per loop

In [7]: %timeit fabs(5.0)

10000000 loops, best of 3: 93.2 ns per loop

In [8]: %timeit abs(-5.0)

10000000 loops, best of 3: 91.8 ns per loop

In [9]: %timeit fabs(-5.0)

10000000 loops, best of 3: 91 ns per loop

So it seems abs() only has slight speed advantage over fabs() for integers. For floats, abs() and fabs() demonstrate similar speed.

In addition to what @aix has said, one more thing to consider is the speed difference:

In [1]: %timeit abs(-5)

10000000 loops, best of 3: 102 ns per loop

In [2]: import math

In [3]: %timeit math.fabs(-5)

10000000 loops, best of 3: 194 ns per loop

So abs() is faster than math.fabs().

回答3:

math.fabs() always returns float, while abs() may return integer.

回答4:

abs() :

Returns the absolute value as per the argument i.e. if argument is int then it returns int, if argument is float it returns float.

Also it works on complex variable also i.e. abs(a+bj) also works and returns absolute value i.e.math.sqrt(((a)**2)+((b)**2)

math.fabs() :

It only works on the integer or float values. Always returns the absolute float value no matter what is the argument type(except for the complex numbers).

python中abs和fabs的区别_Python - abs vs fabs相关推荐

  1. python中函数和类的区别_Python中函数和方法的区别

    简单总结: 与类和实例无绑定关系的function都属于函数(function): 与类和实例有绑定关系的function都属于方法(method). 首先摒弃错误认知:并不是类中的调用都叫方法 函数 ...

  2. python中int和eval的区别_python中eval与int的区别浅析

    python中eval和int的区别是什么?下面给大家介绍一下: 1.eval()函数 eval()能够以Python表达式的方式解析并执行字符串,并将返回结果输出.eval()函数将去掉字符串的两个 ...

  3. python中浅拷贝和深拷贝的区别_Python中浅拷贝和深拷贝的区别

    Python中浅拷贝和深拷贝的区别 浅拷贝和深拷贝示意图 如上图,简单点说 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deepcopy 深拷贝 拷贝 ...

  4. python中raise和raise e区别_python raise和assert的区别

    python中raise和assert的区别 一.使用raise抛出异常 python可以自动触发异常,raise(内置函数)的定义为显示的抛出异常,用户可以使用raise进行判断,显式的引发异常,r ...

  5. python中read和readline的区别_Python中read()、readline()和readlines()三者间的区别和用法...

    前言 众所周知在python中读取文件常用的三种方法:read(),readline(),readlines(),今天看项目是又忘记他们的区别了.以前看书的时候觉得这东西很简单,一眼扫过,待到用时却也 ...

  6. python中search和match的区别_Python中正则表达式match()、search()函数及match()和search()的区别详解...

    match()和search()都是python中的正则匹配函数,那这两个函数有何区别呢? match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个string查找 ...

  7. python中copy和deepcopy的区别_python里shadowcopy和deepcopy的区别

    python中,经常会需要拷贝特定对象,在此可能就会遇到各种bug,原因就是明白这三种操作的区别,赋值,浅拷贝,深拷贝. 赋值(=),浅拷贝(copy)和深拷贝(deepcopy)比较容易区别开的是赋 ...

  8. python中del和pop的区别_python 数组的del ,remove,pop区别

    以a=[1,2,3] 为例,似乎使用del, remove, pop一个元素2 之后 a都是为 [1,3], 如下: >>> a=[1,2,3] >>> a.rem ...

  9. python中删除对象方法的区别_python中delattr删除对象方法的代码分析

    最近我们针对对象属性这块,介绍了不少关于测试属性的方法.在进行一系列测试后,我们发现这个属性并不需要,这时候就要用到删除的功能.在python中可以选择delattr函数删除对象的属性,基于它的删除功 ...

  10. python中字典和集合的区别_Python中字典和集合学习小结

    映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元组等 包含可变对象的列表. ...

最新文章

  1. 李开复:旗下AI公司或在2021年上市,估值至少10亿美元
  2. Python中的[:n],[::n],[:,:,n],[...,n]介绍
  3. 野火开发版屏幕_盘一盘那些年我们常用的物联网开发板!
  4. c++:MFC EDIT控件内容的四种处理方式使用(CEdit控件类型与CString 值联动)
  5. 加入 Git 版本管理(git的基本使用)
  6. mysql: order by, group by ,having, select, where 执行 顺序
  7. matlab中定点数16位转为14位,如何使用python将浮点数转换为具有预定义位数的固定点...
  8. 终于来了!iOS 13大更新发布,新功能均与新冠疫情有关
  9. 将WORD文档中整篇文章的自动编号消除,但原序号不变
  10. 《CCNA学习指南:Cisco网络设备互连(ICND1)(第4版)》——第1章网络功能
  11. 10.看板方法---设置在制品限额
  12. 基于FPGA的VGA/LCD显示控制器设计(下)
  13. python 通达信公式函数,python使用通达信公式,请人用python编写如下公式,我对编程一窍不通...
  14. 训练好的word2vec模型(中文词向量)
  15. 产品读书《失控:全人类的最终命运和结局》KK
  16. 暑假来了,画一个日月地球的轨道模型给孩子们,秒懂四季更迭、日蚀月蚀
  17. 程序员数学(16)--二次根式
  18. Kafka入门教程及安装
  19. 打靶法c语言程序,打靶法求解一维Schrodinger方程程序示例
  20. DBIDBD::mysql安装

热门文章

  1. 欧姆龙CP1H 原点搜索和原点返回功能
  2. 钓鱼工具gophish史上最详细教程(附实例) —— 手把手教你成为“捕鱼人”
  3. 泛泛而谈的渲染学习记录(一)—— 描边中的轮廓边缘
  4. 如果360与QQ冲突下去不兼容,你会放弃哪一个?
  5. 详解圆形头像Shader
  6. pimple idiom C++
  7. DPPO:Distributed Proximal Policy Optimization
  8. 通过jad/mc/redefine命令,在docker容器中实现动态更新代码的功能:
  9. 关于CRC校验的一些总结
  10. java clh_【Java并发编程实战】----- AQS(四):CLH同步队列