我需要帮助了解函数中的最新情况,尤其是return语句.我知道返回语句的作用,但不知道它们是如何做的.我知道他们格式化字符串,但我只是不明白它是如何完成的.如果你们一步一步地采取它会有所帮助.
def intF(n, d, l=40):
s=str(n*10**l / d)
if len(s) < l:
return '0.{:0>{width}}'.format(s,width=l)
if len(s) > l:
return s[0:len(s)-l]+'.'+s[len(s)-l:]
return '0.'+s
Run Code Online (Sandbox Code Playgroud)
这是一个逐行细分:
def intF(n, d, l=40):
Run Code Online (Sandbox Code Playgroud)
很明显.n是一个数字,d是另一个数字(除数),l是小数点后打印的位数.
s=str(n*10**l / d)
Run Code Online (Sandbox Code Playgroud)
这有点不寻常.而不是依靠浮点运算,这个相乘n的10 ** l,由即1后跟l数字.这样最终结果就不会有任何浮点错误 - 假设d它总是一个整数.(当然任何其余数字被截断.此外,更换/与//Python 3中得到相同的行为.)
此时,s将d是整数的字符串表示 - 再次假设是一个整数 - 但它将具有与结果相同的数字float(n) / d.所以现在我们只需要在正确的位置插入小数点.
if len(s) < l:
return '0.{:0>{width}}'.format(s,width=l)
Run Code Online (Sandbox Code Playgroud)
如果长度s小于l,那么我们需要填充它并添加前缀0..这就是它的作用.该{:0>{width}}字段表示创建一个零填充的width宽度字段,并在右侧(>)侧插入一个值.然后s传入via format,我们得到了结果.
if len(s) > l:
return s[0:len(s)-l]+'.'+s[len(s)-l:]
Run Code Online (Sandbox Code Playgroud)
如果长度a大于l,那么我们需要在正确的位置插入小数点.这就是它的作用.它会删除尾随的l数字s,附加一个.,然后追加剩余的l数字.
return '0.'+s
Run Code Online (Sandbox Code Playgroud)
最后一种可能性是,s正是l位数.在这种情况下,我们不需要做任何填充; 我们可以只加0一个小数点.
最后要注意的是:如果将除整数之外的任何内容传递给此函数,它将无法按预期工作.考虑一下:
>>> intF(10, 10.1, 10)
'990.0990099.01'
Run Code Online (Sandbox Code Playgroud)
或这个:
>>> intF(10.1, 10, 10)
'101.00000000.0'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |