Python 3,多个str函数

Jos*_*uis 0 python python-3.x

据我所知,Python不支持函数重载,但在Python文档中

链接到py3k doc

似乎有2种不同的str方法,str(object='')并且str(object=b'', encoding='utf-8', errors='strict')

如何定义这些功能?什么时候第一次被调用而第二次被调用?

我可以创建自己f(o='')f(o=b'')功能(有意义)?

UPDATE

输出str(b'abc','utf-8')abc但是

输出str(b'abc')b'abc'

Mar*_*ers 8

不,python不支持重载,因为它不需要.Python文档通常显示调用方法来说明不同用法的不同方法,但只有一个str()可调用(在这种情况下是一种类型).

在这种情况下,str()接受多个关键字参数,如果未指定,则具有默认值.str()然后,该类型使用那些额外的关键字参数(如果指定)来解释b''字节字符串参数.如果没有传入关键字参数,则str()表现不同.

换句话说,str()根据是否提供了关键字参数来调整它的行为.如果是这种情况,并且第一个参数是bytestring或bytearray,它将解码该参数为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)
Run Code Online (Sandbox Code Playgroud)