Pythonの文字列の長さは、組み込みの len() 関数で求めることができます。
この関数がどのように動作するか見てみましょう。
また、 len() を使って様々なタイプのPython文字列の長さを求めてみましょう。
len()を使う
len()` を説明するために、いくつかの簡単な例を見てみましょう。
>>> a = "Hello from Python"
>>> print(len(a))
20 |
これは文字列の文字数なので、20 と表示されます。
このように、len() を使って長さを求めることができます。
文字列に特殊な文字が含まれていても、Unicode 形式でエンコードされていれば、長さを計算することができます。
>>> a = 'AåBç'
>>> print(len(a))
4 |
特殊なエスケープ文字(バックスラッシュ( ) が前に付いている)を持つ文字列は、バックスラッシュではなくその文字だけが長さにカウントされます。
>>> a = 'A '
>>> print(len(a))
3>>> b = 'A
>>> print(len(b))
4>>> c = 'A'B'
>>> print(len(c))
3 |
生の文字列の場合、バックスラッシュ(“)はリテラルとして扱われるので、バックスラッシュは文字列の長さにカウントされます。
>>> s = r'A '
>>> print(len(s))
5 |
len() の動作
String オブジェクトを使って len() 関数を呼び出すと、String オブジェクトの __len__() メソッドが呼び出されます。
>> a = "Hello from Python"
>>> a.__len__()20 |
これを証明するために、独自の len() をカスタムクラスで実装してみましょう。
len__()はオブジェクトに対して動作するので、クラスobject` を継承しなければなりません。
class Student(object):
def __init__(self, name):
self.name = name
def __len__(self):
print("Invoking the __len__() method on the Student Object to find len()...")
count = 0
for i in self.name:
count += 1
return count
a = Student("Amit")
print(len(a))
|
len()メソッドはlen()` を呼び出すので、イテラブルに含まれるオブジェクトの数を数える関数を実行することになります。
結果は以下の通りです。
Invoking the __len__() method on the Student Object to find len()...
4 |
こうして、クラス Student に対して独自の len() メソッドを実装することができました。