Python 3,多个str函数

Python 3,多个str函数,python,python-3.x,Python,Python 3.x,据我所知,Python不支持函数重载,但在Python文档中是这样的 似乎有两种不同的str方法,strobject=和strobject=b,编码='utf-8',errors='strict' 这些功能是如何定义的?何时调用第一个,何时调用第二个 我可以创建自己的fo=和fo=b函数吗 更新 strb‘abc’、‘utf-8’的输出为abc,但 strb'abc'的输出是b'abc'不,只有一个str 为了清晰起见,它显示了两次,即演示不同的用例 通过使用默认参数、位置参数和关键字参数,可以

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

似乎有两种不同的str方法,strobject=和strobject=b,编码='utf-8',errors='strict'

这些功能是如何定义的?何时调用第一个,何时调用第二个

我可以创建自己的fo=和fo=b函数吗

更新

strb‘abc’、‘utf-8’的输出为abc,但

strb'abc'的输出是b'abc'

不,只有一个str

为了清晰起见,它显示了两次,即演示不同的用例


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

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

你的函数示例不是python3输出strb'abc'的str函数行为,'utf-8'是abc,但是strb'abc'的输出是b'abc'@JoseLuis:我记错了。更新了答案,以更好地反映str的功能。不过,同样的原则也适用。@JoseLuis:我已经引用了str的C实现,f函数在Python中很好地近似于它现在的功能。好吧,这意味着py3k文档在两点上是错误的,或者至少不清楚。str函数只有一个,没有两个,函数定义为strobject=,encoding=None,errors='strict'和not strobject=b,encoding='utf-8',errors='strict'@JoseLuis:转换的默认编码为utf-8;请参阅和,正如我在回答中所述,这两种行为是分开的,因此有明确的记录。不要将文档试图提供清晰性的误解与错误混淆。