当前位置 博文首页 > Python中除法使用的注意事项

    Python中除法使用的注意事项

    作者:admin 时间:2021-07-12 18:37

    本文实例讲解了Python中除法使用的注意事项,是非常重要的技巧,对于Python程序设计来说有很好的借鉴价值。具体分析如下:

    现来看如下示例:

    def avg(first, *rest): 
      return (first + sum(rest)) / (1 + len(rest)) 
    # Sample use 
    avg(1, 2)    # 1.5 
    avg(1, 2, 3, 4) # 2.5 
    
    

    源程序只是为了演示变长参数的使用,不过 Python 2.7.1 的解释器里,我得到的结果却和注释的结果不一样

    >>> def avg(first, *rest): 
    ...   return (first + sum(rest)) / (1 + len(rest)) 
    ...  
    >>> avg(1, 2) 
    1 
    >>> avg(1, 2, 3, 4) 
    2 
    
    

    可以很明显的看到,小数点后的数据被截断了,我记得两个整数相除,"//" 应该才是取整,难道我记错了?

    >>> def avg(first, *rest): 
    ...   return (first + sum(rest)) // (1 + len(rest)) # change '/' to '//' 
    ...  
    >>> avg(1, 2) 
    1 
    >>> avg(1, 2, 3, 4) 
    2 
    
    

    将 “/” 改成了“//”,得到的结果是一样的,“//”的确是取整这一点我是没记错,不过为什么“/”的结果也是截断了的?

    同样的程序我在 3.4.1 的解释器里面做了测试,得到了预想的结果:

    >>> def avg(first, *rest): 
    ...   return (first + sum(rest)) / (1 + len(rest)) 
    ...  
    >>> avg(1, 2) 
    1.5 
    >>> avg(1, 2, 3, 4) 
    2.5 
    >>> def avg(first, *rest): 
    ...   return (first + sum(rest)) // (1 + len(rest)) # change '/' to '//' 
    ...  
    >>> avg(1, 2) 
    1 
    >>> avg(1, 2, 3, 4) 
    2 
    
    

    可以看到在 3.4.1 的解释器里,“/”的结果保留了小数位,而“//”则是取整后的结果

    搜索之后,找到了stackoverflow上的这个问题:Python里如何强制除法的结果为浮点数? 注意这个是针对 2.x 的版本,3.x 里面并不存在这样的问题
    答案的前两个解决方案,都很不错:

    方法1:

    >>> from __future__ import division 
    >>> a = 4 
    >>> b = 6 
    >>> c = a / b 
    >>> c 
    0.66666666666666663 
    
    

    方法2:

    类似于C语言里面的做法:

    c = a / float(b)
    
    

    相信本文所述实例会对大家的Python程序设计有一定的帮助。

    jsjbwy