Share This
Связаться со мной
Крути в низ
Categories
//4 полезных приема работы с Python

4 полезных приема работы с Python

13.07.2021Category : Python

Перевод статьи «4 Ways To Level Up Your Python Code».

Прочитав эту статью, вы научитесь избегать ненужных циклов for, более эффективно получать доступ к элементам словаря и многому другому!

Один из плюсов Python — с его помощью можно заставить работать что угодно. 

Еще один плюс — множество скрытых фишек, которые не только облегчают написание кода, но и делают код «чище» и удобнее для чтения.

В этой статье мы разберем фишки, которые помогут вам отточить ваши навыки. 

1. Забудьте о range(len()). Наш выбор — enumerate() 

Часто возникают ситуации, когда нужно перебрать коллекцию и отслеживать индексы элементов, к которым вы получили доступ. Для этих целей многие использует range(len(коллекция)).

Функция enumerate возвращает enumerate-объект, который хранит в себе и индексы элементов, и их значения. 

С помощью этой функции вы облегчите доступ и к индексам, и к значениям. 

Рассмотрим пример, в котором видна разница между range(len(коллекция)) и enumerate(коллекция).

# объявляем коллекцию — список: names = ['Никита', 'Дарья', 'Екатерина', 'Дмитрий', 'Владимир']  # в случае с range(len(collection)) вы бы написали: for i in range(len(names)):     print(i, names[i])  # в случае с enumerate вы бы написали: for idx, name in enumerate(names):     print(idx, name)  # Оба варианта возвращают: # 0 Никита # 1 Дарья # 2 Екатерина # 3 Дмитрий # 4 Владимир

Еще одна полезная особенность enumerate — можно начинать отсчет не с 0. Для этого вам нужно лишь добавить параметр — start=параметр. Допустим, мы хотим начать выводить элементы списка с 1.

# объявляем коллекцию — список: names = ['Никита', 'Дарья', 'Екатерина', 'Дмитрий', 'Владимир']  # при использовании enumerate перебор с 1 реализуется так: for idx, name in enumerate(names, start=1):     print(idx, name)  # Цикл вернет: # 1 Никита # 2 Дарья # 3 Екатерина # 4 Дмитрий # 5 Владимир

2. Забудьте о квадратных скобках — получайте элементы словаря с помощью .get()

Допустим, мы объявили словарь:

nikita = {   'возраст':32,   'пол':'мужской',   'трудоустроен':True, }

И вы хотите получить значение возраст. Возможно, вы уже привыкли использовать nikita[‘возраст’]. В нашем примере это сработает, но если значения не существует, — нет. 

Например, при попытке получить доступ к несуществующему значению ‘место жительства’ мы получим ошибку KeyError:

nikita = {   'возраст':32,   'пол':'мужской',   'трудоустроен':True, }  print(nikita['место жительства'])  # Вывод: # KeyError: 'место жительства'

Если бы вы перебирали список словарей, то эта ошибка могла бы прервать выполнение нашей программы. Да, конечно, мы бы могли использовать try, except — но зачем, если есть метод .get()?

Если значения, к которому мы хотим получить доступ, не существует — возвращается None. Это очень удобно!

nikita = {   'возраст':32,   'пол':'мужской',   'трудоустроен':True, }  print(nikita.get('место жительства'))  # Вывод: # None

3. Облегчите перебор нескольких списков с помощью zip()

Порой возникают ситуации, когда у нас есть несколько коллекций (например, списков) и все их нужно перебрать. 

В примере №1 мы разбирали способ с применением range(len(collection)), но он не самый лучший.

Рассмотрим пример:

names = ['Никита', 'Дарья', 'Екатерина', 'Дмитрий'] ages = [32, 28, 37, 53] gender = ['Мужчина', 'Женщина', 'Женщина', 'Мужчина']  # старый и скучный способ: for_looped = [] for i in range(len(names)):     for_looped.append((names[i], ages[i], gender[i]))  print(for_looped)  # Вывод: # [('Никита', 32, 'Мужчина'), ('Дарья', 28, 'Женщина'), ('Екатерина', 37, 'Женщина'), ('Дмитрий', 53, 'Мужчина')]

Как видите, в результате мы получаем список, содержащий кортежи с элементами из каждого списка. 

Этот способ, конечно, рабочий. Но если коллекций станет слишком много, код выйдет громоздким. 

С помощью встроенной функции zip() мы можем все немного упростить.

Обратите внимание: функция zip() возвращает zip-объект, но с помощью приведения типов вы можете преобразовать его — например, с помощью list(), tuple() или dict().

А теперь рассмотрим тот же пример и снова вернем список кортежей:

names = ['Никита', 'Дарья', 'Екатерина', 'Дмитрий'] ages = [32, 28, 37, 53] gender = ['Мужчина', 'Женщина', 'Женщина', 'Мужчина']  # перебор списков с помощью zip() zipped = zip(names, ages, gender) zipped_list = list(zipped)  print(zipped_list)  # Вывод: # [('Никита', 32, 'Мужчина'), ('Дарья', 28, 'Женщина'), ('Екатерина', 37, 'Женщина'), ('Дмитрий', 53, 'Мужчина')]

Выглядит намного лучше, не так ли?

Также вы можете преобразовывать коллекции в словари напрямую. Но обратите внимание — коллекций должно быть только две. 

Например, вы хотите создать словарь, в котором пара ключ-значение — это имя:возраст. Сделать это можно так:

names = ['Никита', 'Дарья', 'Екатерина', 'Дмитрий'] ages = [32, 28, 37, 53] gender = ['Мужчина', 'Женщина', 'Женщина', 'Мужчина']  ages = dict(zip(names,ages))  print(ages)  # Вывод: # {'Никита': 32, 'Дарья': 28, 'Екатерина': 37, 'Дмитрий': 53}

Если вы сделаете то же самое, но коллекций будет больше двух — появится исключение ValueError.

4. Используем f-строки для упрощения вывода информации в консоль

Начиная с Python 3.8 f-строки могут быть использованы для самодокументирования — с помощью =. 

Это значит, что для того, чтобы вывести в консоль какое-то значение, вам больше не нужно писать f”variable_name = {variable_name}”.

Рассмотрим пример: 

some_variable = "ПРИВЕТ!"  print(f"some_variable={some_variable}")  # Вывод: # some_variable=ПРИВЕТ!

Вместо этого вы можете написать: 

some_variable = 'Привет!'  print(f'{some_variable=}')  # Вывод: # some_variable='Привет!'

Изменение это небольшое, но довольно важное. Благодаря ему вы не просто избавитесь от повторений в коде, но и упростите его чтение. 

Заключение

Возьмите все эти четыре совета на заметку — с их помощью ваш код будет стабильнее. Еще один плюс — ваш код будет выглядеть гораздо совершеннее и утонченнее. 

4 poleznyh priema raboty s python c2d950c - 4 полезных приема работы с Python

Кодинг-марафон по Python

Реши 10 задач и выиграй 5500 рублей

Подписаться ×

  • 0 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Свежие комментарии

    Рубрики

    About Author 01.

    blank
    Roman Spiridonov

    Моя специальность - Back-end Developer, Software Engineer Python. Мне 39 лет, я работаю в области информационных технологий более 5 лет. Опыт программирования на Python более 3 лет. На Django более 2 лет.

    Categories 05.

    © Speccy 2022 / All rights reserved

    Связаться со мной
    Close