2016年4月4日

str.center() の奇妙な振る舞い

プチネタを紹介します。

str型は center() という関数を持っています。これは、指定された長さに文字列を伸ばし、中央寄せをするものです。
実際の動作は以下のようになります。

>>> 'a'.center(3)
' a '

>>> 'a'.center(5)
'  a  '

>>> 'aa'.center(4)
' aa '

>>> 'aa'.center(6)
'  aa  '
上の4つの例では、(指定された長さ - 元の文字列の長さ)が偶数です。この場合、挿入される空白文字の数は左右で同じになります。


では、(指定された長さ - 元の文字列の長さ)が奇数の時はどうなるのでしょう。実際の動作を見てみます。

>>> 'a'.center(2)
'a '

>>> 'a'.center(4)
' a  '

>>> 'aa'.center(3)
' aa'

>>> 'aa'.center(5)
'  aa '
左の方が空白が1つ少ない場合と、右の方が空白が1つ少ない場合があります。
あまり統一された動作とは言えませんね。


この動作について、こちらでも議論となっています。
結論は「望ましくない動作である。しかし、古くから(2.x時代から)この動作なので、今になって変更すると却って混乱を招く恐れがある。よって、このままとする」となったようです。

0 件のコメント:

コメントを投稿