Я только улучшение тестового покрытия для library, который должен поддерживать ломтики, и я заметил, что ломтики могут содержать нецелые типы:Почему в кусочках python допускаются не встроенные встроенные типы?
>>> slice(1, "2", 3.0)
slice(1, '2', 3.0)
>>> sl = slice(1, "2", 3.0)
>>> [1,2,3][sl]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: slice indices must be integers or None or have an __index__ method
Это может быть просто моя статической типизацией фона, но это, кажется, странно для меня, что встроенные типы без __index__
могут быть переданы здесь без TypeError
. Почему это так? Был бы я прав, если предположить, что произвольные типы разрешены для поддержки печати уток для типов, которые реализуют __index__
? Является ли отсутствие проверки типа из-за причин производительности для наиболее часто используемых случаев?
До PEP 357 был ли этот фрагмент недействительным?
Синтаксис среза с поплавками может эффективно описывать ограничительную рамку в n-мерном пространстве, что может быть удобно в некоторых случаях. Пользовательский тип может принимать такие срезы. – Kevin
Это действительно интересный прецедент для плавания, о котором я не думал. Почему строки разрешены? – shuttle87
Вы также можете использовать [Эллипсис] (http://stackoverflow.com/questions/772124/what-does-the-python-ellipsis-object-do) в срезах. –