python程序中`ch [:prefix_len%len(ch)]`的解释

时间:2016-02-20 05:39:51

标签: python

我正在寻找at this python program并且几乎了解其流程,但我无法理解以下部分中的ch[:prefix_len%len(ch)]

else:
            prefix = ch * (prefix_len/len(ch)) + ch[:prefix_len%len(ch)]
            suffix = ch * (suffix_len/len(ch)) + ch[:suffix_len%len(ch)]

以下是上下文:

def banner(text, ch='=', length=78):
    if text is None:
        return ch * length
    elif len(text) + 2 + len(ch)*2 > length:
        # Not enough space for even one line char (plus space) around text.
        return text
    else:
        remain = length - (len(text) + 2)
        prefix_len = remain / 2
        suffix_len = remain - prefix_len
        if len(ch) == 1:
            prefix = ch * prefix_len
            suffix = ch * suffix_len
        else:
            prefix = ch * (prefix_len/len(ch)) + ch[:prefix_len%len(ch)]
            suffix = ch * (suffix_len/len(ch)) + ch[:suffix_len%len(ch)]
        return prefix + ' ' + text + ' ' + suffix

请有人帮我理解这一点。谢谢。

2 个答案:

答案 0 :(得分:1)

他们正在添加其余部分。

前缀= 10 ch ='#& +'

如果您只是将 ch 乘以 prefix_len / len(ch),您将获得 9 ,但您知道需要10。

所以 ch [:prefix_len%len(ch)] 只是为其余部分索引到 ch 字符串。

有意义吗?

答案 1 :(得分:1)

当然! ch[:prefix_len % len(ch)]正在从头开始访问ch序列的切片(因为:之前没有值,并且在由{{1}定义的索引之前转到一个字符}。

此值为prefix_len % len(ch)(前面定义为前缀的长度,毫不奇怪)模数为prefix_len的长度。 (将其视为整数除ch后遗留下来的余数。

我运行了这样的函数:prefix_len / len(ch)并得到: print(banner("Hello everyone!", "1234")) 所以你可以看到它符合123412341234123412341234123412 Hello everyone! 1234123412341234123412341234123值(我的情况下为ch)在它所拥有的空间中。