41 вопрос о работе со строками в python

Многострочные строки документации в Python

Многострочные строки документации состоят из резюмирующей однострочной строки документации, за которой следует пустая строка, а затем более подробное описание.


Документ PEP 257 предоставляет стандартные соглашения для написания многострочных строк документации для различных объектов.

Некоторые из них перечислены ниже:

1. Строки документации для модулей Python

  • Строки документации для модулей Python должны содержать список всех доступных классов, функций, объектов и исключений, которые импортируются при импорте модуля.
  • Они также должны содержать краткое пояснение (в одну строку) для каждого элемента из этого списка.

Строки документации пишутся в начале файла Python.

Давайте посмотрим на строки документации для встроенного модуля .

Пример 4: строки документации модуля Python.

import pickle
print(pickle.__doc__)

Результат:

Мы убедились, что строка документации, записанная в начале файла модуля pickle.py, может быть получена при помощи атрибута .

2. Строки документации для функций Python

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

Пример 5: строки документации для функций Python.

def add_binary(a, b):
    '''
    Возвращает сумму двух десятичных чисел в двоичном формате.

            Параметры:
                    a (int): первое десятичное целое число
                    b (int): второе десятичное целое число

            Возвращаемое значение:
                    binary_sum (str): двоичная строка суммы a и b
    '''
    binary_sum = bin(a+b)
    return binary_sum


print(add_binary.__doc__)

Результат:

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

3. Строки документации для классов Python

  • Строки документации для класса должны обобщать его поведение и перечислять открытые (public) методы и переменные экземпляра.
  • Подклассы, конструкторы и методы должны иметь свои собственные строки документации.

Пример 6: строки документации для класса Python.

Предположим, у нас есть файл Person.py со следующим кодом:

class Person:
    """
    Класс для представления человека.

    ...

    Атрибуты
    --------
    name : str
        имя человека
    surname : str
        фамилия человека
    age : int
        возраст человека

    Методы
    ------
    info(additional=""):
        Печатает имя и возраст человека.
    """

    def __init__(self, name, surname, age):
        """
        Устанавливает все необходимые атрибуты для объекта person.

        Параметры
        ---------
        name : str
                имя человека
        surname : str
                фамилия человека
        age : int
                возраст человека
        """

        self.name = name
        self.surname = surname
        self.age = age

    def info(self, additional=""):
        """
        Печатает имя и возраст человека.

        Если аргумент 'additional' передан, то он добавляется после основной информации.

        Параметры
        ---------
        additional : str, optional
            Дополнительная информация для отображения (по умолчанию None)

        Возвращаемое значение
        ---------------------
        None
        """

        print(f'My name is {self.name} {self.surname}. I am {self.age} years old.' + additional)

Мы можем использовать следующий код для доступа только к строкам документации класса :

print(Person.__doc__)

Результат:

Использование функции help() для строк документации

Мы также можем использовать функцию для чтения строк документации, связанных с различными объектами.

Пример 7: чтение строк документации с помощью функции help().

Мы можем использовать функцию для класса Person из Примера 6:

help(Person)

Результат:

Здесь мы видим, что функция получает строки документации класса Person вместе с методами, связанными с этим классом.

4. Строки документации для скриптов Python

  • Строки документации для скрипта Python должны документировать функции скрипта и синтаксис командной строки, переменные среды и файлы.
  • Строки документации скрипта должны использоваться в качестве «сообщения по использованию», которое выводится, когда скрипт вызывается с некорректными или отсутствующими аргументами (или, возможно, с опцией «-h», для «help»).
  • Они должны служить краткой ссылкой на все функции и аргументы.

5. Строки документации для пакетов Python


Строки документации для пакета Python записываются в файл  __init__.py пакета. Они должны содержать все доступные модули и подпакеты, экспортируемые пакетом.

Перечисления enum (Python 3.4+)

Python 3 поддерживает простой способ написания перечислений через класс Enum. Этот класс можно назвать удобным способом инкапсуляции списка констант, чтобы они не были разбросаны по всему коду без структуры.

Python

from enum import Enum, auto

class Monster(Enum): ZOMBIE = auto() WARRIOR = auto() BEAR = auto()

print(Monster.ZOMBIE) # Monster.ZOMBIE

1 2 3 4 5 6 7 8 9 10

fromenum importEnum,auto

classMonster(Enum)

ZOMBIE=auto()

WARRIOR=auto()

BEAR=auto()

print(Monster.ZOMBIE)# Monster.ZOMBIE

Python

for monster in Monster: print(monster)

# Monster.ZOMBIE # Monster.WARRIOR # Monster.BEAR

1 2 3 4 5 6

formonster inMonster

print(monster)

  # Monster.ZOMBIE # Monster.WARRIOR # Monster.BEAR

Learn shortcuts as you work

PyCharm provides several possibilities to learn shortcuts:

  • Find Action is the most important command that enables you to search for commands and settings across all menus and tools.

    Press Ctrl+Shift+A and start typing to get a list of suggested actions. Then select the necessary action and press Enter to execute it.

  • Key Promoter X is a plugin that shows a popup notification with the corresponding keyboard shortcut whenever a command is executed using the mouse. It also suggests creating a shortcut for commands that are executed frequently.

  • If you are using one of the predefined keymaps for your OS, you can print the default keymap reference card and keep it on your desk to consult it if necessary. This cheat sheet is also available under Help | Keymap Reference.

  • To print a non-default or customized keymap, use the Keymap exporter plugin.

#4: Майнинг данных Twitter

Благодаря интернету, и (все чаще и чаще) интернету вещей (IoT) – у нас есть доступ к огромному количеству данных, о которых не могли мечтать всего десять лет назад. Аналитика – это огромная часть любой сферы, которая связана с данными. О чем люди разговаривают? Какие шаблоны видны в их поведении?

Твиттер – отличное место, чтобы получить ответы на эти вопросы. Если вам интересен анализ данных, тогда майнинг данных в Twitter – отличный способ попробовать свои навыки в Python, чтобы ответить на вопросы об окружающем мире.

В учебном пособии по анализу Твиттера позволит вам получать данные из Твиттера и анализировать настроения пользователей в среде docker. Вы узнаете, как регистрировать приложение вместе с Твиттером, это понадобиться вам, чтобы получить доступ к потоковым API.

Вы увидите, как использовать Tweepy для фильтрации твитов, которые вы хотите вытягивать, TextBlob для подсчета настроения этих твитов, Elasticsearch для анализа содержимого этих твитов и Kibana для показа результатов. По окончанию данного руководства, вы уже будете готовы к тому, чтобы заняться другими проектами, которые используют Python для обработки текстов и распознавания речи.

Управление версиями в PyCharm

Замечание: для примеров используется .

Настройка систем управления версиями

Что-бы включить интеграцию с системой управления версиями пройдите VCS → VCS Operations Popup… в верхнем меню или нажмите клавиши Ctrl+V на Mac или Alt+` на Windows или Linux. Выберите Enable Version Control Integration…. Посмотрите на открывшееся окно:

Выберите Git из выпадающего списка, нажмите OK и в вашем проекте включена система управления версиями

Обратите внимание, что если вы открыли существующий проект с включенным управлением версиями, PyCharm увидит это и автоматически подключится к ней

Теперь, если вы пройдете VCS Operations Popup…, то увидите всплывающее окно с опциями , , , , и много другое:


Если вы не можете найти то, что нужно, то, скорее всего, сможете это сделать, перейдя в верхнем меню в VCS, выбрав Git. Здесь даже можно создавать и просматривать запросы на извлечение.

Коммиты и разрешение конфликтов

Есть две особенности интеграции систем управления версиями в PyCharm, которые лично я использую и получаю от этого огромное удовольствие! Допустим, вы закончили свою работу и хотите это как-то отметить. Перейдите VCS → VCS Operations Popup… → Commit… или нажмите Cmd+K на Mac или Ctrl+K на Windows или Linux. Посмотрите на появившееся окно:

В этом окне можно:

  1. Выбрать файлы для фиксации;
  2. Записать сообщение о фиксации;
  3. Выполнить все команды проверки и очистки ;
  4. Посмотреть различия в изменениях;
  5. Зафиксировать и нажать стрелку справа от кнопки Commit и выбрать Commit and Push….

Это кажется молниеносно и магически, особенно если вы привыкли делать все в командной строке и вручную.

При работе в команде случаются конфликты слияния. Кто-то фиксирует изменения в файле, над которым вы сейчас работаете, но его изменения пересекаются с вашими, потому что вы оба поменяли одни и те же строки. Система управления версиями не сможет самостоятельно выяснить, какие изменения ей зафиксить ваши или вашего товарища по команде. Таким образом, могут получиться эти неудачные стрелки и символы:

Всё это выглядит странно и трудно понять, что надо удалить, а что оставить. PyCharm на помощь! У него гораздо приятнее и чище способ разрешения конфликтов. Перейдите к VCS в верхнем меню, выберите Git, а затем Resolve conflicts…. Выберите файл, конфликты которого вы хотите разрешить, и нажмите Merge. Вы увидите следующее открытое окно:

В левой колонке вы увидите свои изменения. Справа — изменения, внесенные вашим товарищем по команде. Наконец, в средней колонке вы увидите результат. Конфликтующие строки подсвечиваются и вы можете видеть маленькие X and >>/<< рядом с этими строками. Нажмите стрелки для того, чтобы принять изменения, а X, что бы отклонить. После того, как вы разрулите все эти конфликты, нажмите кнопку Apply:

В приведенной выше картинке в первой противоречивой строке автор отказался от своих изменений и принял изменения своих товарищей по команде. А во второй строке наоборот, автор принял свои собственные изменения и отклонил изменения своих партнеров по команде.

При интеграции с системами управления версиями в PyCharm есть гораздо больше возможностей, чем здесь показано. Более подробную информацию можно получить в .

Pathlib (Python 3.4+)

F-строки — это отличное решение, но некоторые строки, такие как пути файлов, имеют свои собственные библиотеки, которые заметно упрощают работу. Python 3 предоставляет pathlib в качестве удобной абстракции для работы с путями файлов.

Python

from pathlib import Path

root = Path(‘post_sub_folder’) print(root) # post_sub_folder

path = root / ‘happy_user’ # Делаем путь абсолютным

print(path.resolve()) # /home/weenkus/post_sub_folder/happy_user

1 2 3 4 5 6 7 8 9 10 11

frompathlib importPath

root=Path(‘post_sub_folder’)

print(root)

# post_sub_folder  

path=root’happy_user’

# Делаем путь абсолютным  

print(path.resolve())

# /home/weenkus/post_sub_folder/happy_user

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

Комментарии в Python начинаются с хеша (символа #), после которого ставится пробел.

Общий вид комментария:

Строки комментариев не выполняются, потому при запуске программы вы не увидите никаких признаков наличия в ней комментариев. Комментарии находятся в исходном коде для простоты чтения кода программы другими пользователями, а не для выполнения.

В простейшей программе «Hello, World!» комментарий может выглядеть так:


В цикле for, который итерирует списки, могут быть такие комментарии:

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

Для примера рассмотрим функцию again() из руководства Написание простейшего калькулятора в Python 3:

Комментарии должны помогать программистам работать с кодом. Если же по какой-либо причине вы не можете предоставить должную поддержку и своевременное обновление комментариев, лучше их вообще не использовать. Код без комментариев лучше, чем код с неправильными комментариями.

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

Виртуальные окружения

Для разработки и тестирования пользователи Python часто применяют виртуальные окружения (virtual environments). В Python 2.x их поддержка была реализована опциональным модулем, но в Python3 уже есть встроенная поддержка, так что для их установки ничего делать не нужно.

Каждое окружение живет в своем каталоге, поэтому устанавливать в него модули можно от имени обычного пользователя. Если ты необратимо сломал свое окружение, можно просто удалить каталог и пересоздать его. Не менее полезно бывает создать чистое окружение чтобы убедиться, что твоя библиотека или приложение чисто устанавливается из исходников и работает.

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

Выйти из окружения можно командой .

Чтобы не засорять рабочую систему лишними модулями, все примеры лучше пробовать именно в виртуальном окружении.

Замена скриптов на shell

Скрипты на Bourne shell — классика системного администрирования и автоматизации, но как язык программирования, шелл так и остался в семидесятых. Его собственные средства отладки и обработки ошибок примитивны, к тому же, если ты хочешь сделать скрипт кроссплатформенным, нужно тщательно избегать «башизмов» и всего, что не входит в стандарт POSIX. Инструменты вроде ShellCheck могут с этим помочь, но можно пойти и другим путем — не использовать Shell вовсе.

В стандартной библиотеке Python уже есть ряд модулей, которые сделают за тебя половину работы. К примеру, скопировать файл с помощью функции из модуля shutil можно в одну строку.

Там же присутствуют , и функции для упаковки файлов в архивы, кроме того, у функций есть опция .

Выполнить команду и получить ее код завершения и вывод ничуть не сложнее.

Иногда бывает сложно обойтись без передачи пользовательского ввода внешней команде. Это открывает простор для уязвимостей типа shell injection и требует внимания к деталям. К счастью, в стандартной библиотеке уже есть функция, которая добавит кавычки и экранирует опасные символы.

#3: Создание калькулятора

Этот простой проект – отличный шлюз в мире GUI программирования. Создание бекенд сервисов – это важная часть развертывания, но может появиться необходимость во фронтенде, которую стоит учитывать

Создание приложений, которыми пользователи могут легко пользоваться – это первостепенная важность

Если вам интересен UX\UI дизайн, то это руководство вам понравится. Вы будете работать с модулем tkinter, стандартным пакетом графического пользовательского интерфейса, который поставляется вместе с Python.

Модуль tkinter – это обертка вокруг Tcl/Tk, комбинация скриптового языка Tcl и расширения фреймворка графического пользовательского интерфейса Tk. Если у вас есть установленный Python, то у вас уже есть готовый к использованию tkinter. Вам нужно сделать простой вызов перед началом:

Python

<span class=»kn»>from</span> <span class=»nn»>tkinter</span> <span class=»k»>import</span> <span class=»o»>*</span>

1 <span class=»kn»>from<span><span class=»nn»>tkinter<span><span class=»k»>import<span><span class=»o»>*<span>

После проведения установки, вы можете начать работу с постройкой своего первого GUI калькулятора в Python. Попрактикуйтесь в использовании модуля tkinter и наблюдайте за тем, как ваше виденье материализуется на экране. После того, как вы окрепнете, вы можете начать работать с другими GUI инструментами Python. Ознакомьтесь к официальной документацией GUI программирования в Python для дополнительной информации.


С этим читают