[英]I don't understand what's going on in my return statements
我需要帮助来了解函数中发生的事情,尤其是return语句。 我知道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
这是逐行细分:
def intF(n, d, l=40):
很明显。 n
是一个数字, d
是另一个数字(除数), l
是在小数点后要打印的位数。
s=str(n*10**l / d)
这有点不寻常。 而不是依靠浮点算法,这将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)
如果s
的长度小于l
,则需要填充它并在0.
加上前缀。 这就是这样做的。 {:0>{width}}
字段表示要创建一个width
width的零填充字段,然后在右侧( >
)处向其中插入一个值。 然后s
通过format
传入,我们得到了结果。
if len(s) > l:
return s[0:len(s)-l]+'.'+s[len(s)-l:]
如果长度a
大于l
,那么我们需要插入小数点在正确的位置。 这就是这样做的。 它从s
删除结尾的l
位,并附加a .
,然后附加其余的l
位数字。
return '0.'+s
最终的可能性是s
恰好是l
位数字。 在这种情况下,我们无需进行任何填充; 我们可以在前面加上0
和小数点
最后一点:如果将整数以外的任何内容传递给此函数,则它将无法正常工作。 考虑一下:
>>> intF(10, 10.1, 10)
'990.0990099.01'
或这个:
>>> intF(10.1, 10, 10)
'101.00000000.0'
线s=str(n*10**l / d)
将n/d
乘以10**l
来将比率n/d
转换为整数,以得到小数点右边的l
数字。
之后,它将测试结果中的位数。 如果小于“ l”,则该比率小于0.1。 如果大于“ l”,则大于或等于1.0。 如果介于两者之间,则该比率介于0.1和1.0之间。
表达式'0.{:0>{width}}'.format(s,width=l)
是放置前导'0'的一种奇特方法。 在前面并填写必要的数字“ 0”,使其达到l
小数点。
表达式s[0:len(s)-l]+'.'+s[len(s)-l:]
将小数点放在字符串中间的适当位置。
您正在基于传递给函数的变量创建一个字符串。 然后,它检查字符串的长度,如果小于1,则返回其格式,大于1,返回格式,作为后备默认值(长度为1个字符),返回另一种格式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.