私はちょうど私を少し混乱させる次のpythonコードに出くわしています:
res = self.result[::-1].encode('hex')
エンコードの内容は非常に明確で、16 進値で表す必要があります。しかし、この self.result[::-1] 、特にコロンは何を意味するのでしょうか?
結果から取得する「スライス」を表します。最初の要素は開始位置、2 番目は終了 (非包括的)、3 番目はステップです。コロンの前後の空の値は、先頭から開始するか ( s[:3]
)、最後まで拡張するか( ) を示しますs[3:]
。ここに実際の数値を含めることもできますが、可能な場合は省略した方が慣用的です。
例えば:
In [1]: s = 'abcdefg'
先頭から開始し、インデックス位置 2 で停止する文字列のスライスを返します。
In [2]: s[:3]
Out[2]: 'abc'
3 番目のインデックス位置から始まり、最後まで続く文字列のスライスを返します。
In [3]: s[3:]
Out[3]: 'defg'
最後から始まり、一度に 1 要素ずつ戻る文字列のスライスを返します。
In [4]: s[::-1]
Out[4]: 'gfedcba'
他のすべての要素を含む文字列のスライスを返します。
In [5]: s[::2]
Out[5]: 'aceg'
それらはすべて相互に組み合わせて使用することもできます。ここでは、インデックス位置 6 からインデックス位置 2 までの他のすべての要素を返すスライスを返します (s[:2:-2]
より慣用的ですが、奇妙な数の文字を選択したことに注意してください :) ):
In [6]: s[6:2:-2]
Out[6]: 'ge'
step 要素は、返す要素を決定します。あなたの例では-1
、一度に 1 要素ずつ、項目を逆方向に進むことを示しています。
これは、リストを逆にする一般的なイディオムです。
a = ['a', 'b', 'c', 'd']
b = a[::-1]
print b
['d', 'c', 'b', 'a']
ここで「拡張スライス」について読むことができます。