Pythonのascii()関数の使い方を解説する

スポンサーリンク

今回は、Pythonのascii()関数を取り上げます。

ascii()関数は、オブジェクトの文字列表現を返しますが、そのままではASCII文字しか持っていません。

残りの非ASCII文字はバックスラッシュ(absolute)でエスケープされます( )。

例えば、改行文字(n)はASCII文字ではありません。

では、具体的にどのように動作するのか、いくつかの例を見ていきましょう


スポンサーリンク

Python の ascii() 関数を使う – いくつかの例

Python の ascii() 関数は引数をひとつだけ取りますが、これはどんなオブジェクトでも構いません。

つまり、リストや文字列など、あらゆる種類のオブジェクトが有効です。

これは文字列を返します。

リストやコレクションに対して使用する場合、この関数はコレクションの各メンバーに対して呼び出されます。

では、これを見てみましょう。


プリミティブなデータ型に Python の ascii() を使う

ブール値、文字列、整数`のような基本的なデータ型では、期待通りに動作します。

i = 15
print(ascii(i))
 
b = True
print(ascii(b))
 
s = 'abc'
print(ascii(s))
 
s = 'Hello from Python
'
print(ascii(s))

結果は以下の通りです。

'15'
'True'
"'abc'"
"'Hello from Python
'"

このように、非ASCII文字( t, n)については、バックスラッシュ自体をエスケープする必要があることがわかります。

Iterable/Collectionsでascii()を使用します。

リスト/タプル/ディクショナリで使用したい場合でも、それは可能です! しかし、これは単純にコレクション/反復可能の各メンバーに適用されます。

つまり、リストが n 個の要素を持つ場合、それらの n 個すべてに関数が適用され、文字列のリストが返されます。

m = ["Hello from Python 22", "AskPythön", "Hi"]
print(ascii(m))

結果は以下の通りです。

['Hello from Python 22', 'AskPythxf6n', 'Hi']

同様に、Dictionary {key:value} の場合は、 keyvalue の両方に対して適用されます。

d = {'â':'å', '2':2, 'ç':'ć'}
print(ascii(d))

結果は以下の通りです。

出力

{'xe2': 'xe5', '2': 2, 'xe7': 'u0107'}

タプルの場合は、リストと同じような処理になります。

すべての要素は ASCII ライクな文字列表現に変換される。

t = ("Hellö", 123, ["Python"])
print(ascii(t))

結果は以下の通りです。

('Hellxf6', 123, ['Python'])

repr()関数との比較

repr()関数もオブジェクトの文字列表現を返すために使われます。

しかし、repr()` は非アスキー文字をそのまま出力するという違いがあります。

カスタムオブジェクトの場合、ascii() 関数は内部的に __repr__() 関数を呼び出しますが、非 ASCII 文字を必ずエスケープするようにします。

クラスを使用して独自のオブジェクトを作成し、これを試してみましょう。

class MyClass:
    def __init__(self, name):
        self.name = name

それでは、オブジェクトを作成して、 ascii()repr() を呼び出してみましょう。

my_obj = MyClass("AskPythön")
print(ascii(my_obj))
print(repr(my_obj))

結果は以下の通りです。

'<__main__.MyClass object at 0x7f6adcf30940>'
'<__main__.MyClass object at 0x7f6adcf30940>'

このクラスには repr() 関数がないので、デフォルトの object 定義が使用されます。

そのため、出力には MyClass object が表示されます。

これを変更するには、 __repr__() ダンダメソッドをオーバーロードしなければなりません。

class MyClass:
    def __init__(self, name):
        self.name = name
    def __repr__(self):
        return self.name

これで、 ascii()repr() を呼び出したときに、name 属性を直接取得できるようになりました!

my_obj = MyClass("AskPythön")
print(ascii(my_obj))
print(repr(my_obj))

結果は以下の通りです。

AskPythxf6n
AskPythön

これで、違いがはっきりわかると思います!


まとめ

この記事では、Pythonの ascii() 関数の使い方について学び、さまざまな種類のオブジェクトに対して使用することを学びました。

タイトルとURLをコピーしました