Я читал исходный код модуля Python xml.etree.ElementTree (https://github.com/python/cpython/blob/master/Lib/xml/etree/ElementTree.py)) и наткнулся на интересное использование фрагментов. Авторы написали следующий код:
prefix = text[:1]
Что, насколько я могу судить, идентично:
try: prefix = text[0] except IndexError: prefix = text
Являются ли эти фрагменты кода идентичными? Каковы преимущества и недостатки использования [: 1] вместо [0]?
Разница в формате вывода:
a[:1] возвращает список с первым элементом. Пока a[0] возвращает первый элемент.
a[:1]
a[0]
>>> a = [1, 2, 3, 4, 5, 6] >>> a[:1] [1] >>> a[0] 1
Еще одно отличие: text[0] приводит к исключению, если text представляет собой пустой список, а text[:1] возвращает пустой список.Аналогично, индексирование пустой строки даст вам исключение, а нарезка вернет пустую строку.
text[0]
text
text[:1]
Если ваш вопрос ограничен только использованием строк, то да - они идентичны.Вы получаете выгоду от меньшего количества кода, но второй фрагмент является более питонным и явным.
Slices - [: 1] - возвращает список, тогда как [0] возвращает атом.