据我所知,Python不支持函数重载,但是在Python文档中
似乎有两种不同的 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'
据我所知,Python不支持函数重载,但是在Python文档中
似乎有两种不同的 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'
不,python 不支持重载,因为它不需要. Python 文档经常显示调用方法的不同方式来说明不同的用途,但只有一个str()
可调用的(在这种情况下是一种类型)。
在这种情况下,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)