Вопрос по питону (вообще наверное по логике)
Есть код, элементарный:
def get_extension(filename): filename_parts = filename.split('.') if len(filename_parts) < 2: # filename has no dots raise ValueError('the file has no extension') first, *middle, last = filename_parts :) if not last or not first and not middle: :) # example filenames: .filename, filename., file.name. raise ValueError('the file has no extension') return filename_parts[-1] print(get_extension('abc.py')) print(get_extension('abc')) # raises ValueError print(get_extension('.abc')) # raises ValueError print(get_extension('.abc.def.')) # raises ValueError
Строчка, выделенная смайликами, непонятна. Как я понял, python выполняет по иерархии not - and - or.
Назначение строки ясно интуитивно, отсекаем всякие лишние моменты.
А вот код в голове осознать не могу.
Как пытаюсь понимать сам:
Если не последний или (не первый и не средний) то….
С не последний все понятно, значит в строке нет точки, либо точка в конце, все разделилось в первый элемент - значит расширения нет.
А вот дальше: (не первый и не средний) как вообще может быть? Я ее понимаю как не существует первого элемента и не существует среднего элемента одновременно. Но так же не будет…
Строкой выше
first, *middle, last = filename_parts
Может кто разъяснит порядок интерпретации этой строки именно.
P.S. Файл возвращает расширение по названию, если кто не понял.