Python 3,多str函数

2024-05-23 13:59:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

link to py3k doc

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

这些功能是如何定义的?第一次调用是什么时候,第二次调用是什么时候?

我能创建自己的f(o='')f(o=b'')函数吗(有意义)?

更新

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

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


Tags: to方法函数文档功能docobjectlink
2条回答

不,只有一个str()

为了清楚起见,它被显示了两次(即,演示不同的用例)。

通过使用默认参数、位置参数和关键字参数,可以在代码中实现类似的效果。见Python normal arguments vs. keyword arguments

不,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)

相关问题 更多 >