0

私の知る限り、Pythonは関数のオーバーロードをサポートしていませんが、Pythonのドキュメントでは

py3kドキュメントへのリンク

str(object='')2つの異なるstrメソッドがあるようです。str(object=b'', encoding='utf-8', errors='strict')

これらの関数はどのように定義されていますか?最初が呼び出されるのはいつですか、2番目はいつ呼び出されますか?

自分f(o='')f(o=b'')関数を作成できますか(意味があります)?

アップデート

の出力str(b'abc','utf-8')abc

の出力str(b'abc')b'abc'

4

2 に答える 2

8

いいえ、Pythonはオーバーロードをサポートする必要がないため、オーバーロードをサポートしていません。Pythonのドキュメントには、さまざまな使用法を説明するためにメソッドを呼び出すさまざまな方法が示されていることがよくありますが、str()呼び出し可能なものは1つだけです(この場合はタイプ)。

この場合、str()は複数のキーワード引数を受け入れます。指定されていない場合はデフォルト値があります。次に、str()型は、指定されている場合、それらの追加のキーワード引数を使用して、b''バイト文字列引数を解釈します。キーワード引数が渡されなかった場合、str()動作は異なります。

つまり、str()キーワード引数が指定されているかどうかに基づいて動作を調整します。その場合、最初の引数がバイト文字列またはバイト配列の場合、追加のキーワード引数を使用してデコードプロセスを制御し、その引数をUnicodeテキストにデコードします。

最初の引数のタイプをチェックして、キーワード引数に関して同じように動作する独自の関数を定義できます。

def f(o, encoding=None, errors=None):
    if encoding is None and errors is None:
        return o.__str__()

    if isinstance(o, str):
        raise TypeError('decoding str is not supported')

    if not isinstance(o, (bytes, bytesarray)):
        raise TypeError('coercing to str: need bytes, bytearray'
             'or buffer-like object, %s found' % type(o).__name__)
    return o.decode(encoding, errors)
于 2012-11-28T16:55:39.293 に答える
0

いいえ、1つだけstr()です。

わかりやすくするために(つまり、さまざまなユースケースを示すために)2回示しています。

デフォルトの引数、位置引数、およびキーワード引数を使用することで、コードで同様の効果を実現できます。Pythonの通常の引数とキーワードの引数を参照してください

于 2012-11-28T16:55:25.493 に答える