Я немного играл с startswith()
, и я обнаружил что-то интересное:
>>> tup = ('1', '2', '3')
>>> lis = ['1', '2', '3', '4']
>>> '1'.startswith(tup)
True
>>> '1'.startswith(lis)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: startswith first arg must be str or a tuple of str, not list
Теперь ошибка очевидна, и листинг списка в кортеж будет работать отлично, как это было вначале:
>>> '1'.startswith(tuple(lis))
True
Теперь, мой вопрос: почему первым аргументом должна быть str или кортеж префиксов str, но не список префиксов str?
AFAIK, код Python для startswith()
может выглядеть следующим образом:
def startswith(src, prefix):
return src[:len(prefix)] == prefix
Но это меня просто смущает больше, потому что даже с учетом этого все равно не должно быть никакого значения, является ли список или кортеж. Что мне не хватает?