Форум сайта python.su
Привет всем. Осваиваю программирование недавно.
Вопрос по питону (вообще наверное по логике)
Есть код, элементарный:
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
first, *middle, last = filename_parts
Отредактировано Alexey_mne31 (Авг. 23, 2021 16:20:25)
Офлайн
Л.
Офлайн
Alexey_mne31Все вы правильно понимаете.
Может кто разъяснит порядок интерпретации этой строки именно.
(not last) or ((not first) and (not middle))
for fp in [["",""],["a",""],["","a"],["a","a"]]: first, *middle, last = fp if not last: print("last",fp) if not first and not middle: print("strange",fp) last ['', ''] strange ['', ''] last ['a', ''] strange ['', 'a']
Офлайн
Alexey_mne31
А вот дальше: (не первый и не средний) как вообще может быть? Я ее понимаю как не существует первого элемента и не существует среднего элемента одновременно. Но так же не будет…
>>> filename_parts = '.abc'.split('.') >>> >>> first, *middle, last = filename_parts >>> >>> first, middle, last ('', [], 'abc') >>> >>> not last or not first and not middle True >>> (not last) or ((not first) and (not middle)) True >>>
Alexey_mne31Это в Windows он всегда будет. Она тебе не даст создать файл без имени и будет давать советы, как тебе файл называть. А ты поставь себе Linux и учись программировать там. В Linux, во-первых, нет расширений (расширения - это просто части имени), а во-вторых, в Linux очень часто бывает точка в начале имени, так как это сообщает файловому менеджеру или командной оболочке, что файл скрытый и не нужно его показывать. Поэтому, чтобы скрыть файл/директорию в Linux, достаточно добавить точку в начало его/её имени. Отвыкай от Windows.
мы в первую очередь растасовываем элементы списка в первый элемент, он же всегда будет….
Отредактировано py.user.next (Авг. 23, 2021 21:54:03)
Офлайн
doza_andБлин, старик, и точно все элементарно…спасибо тебе!
Офлайн