IPython, инкапсуляция и аргументы

Этот пост является продолжением части I из серии Python: помимо основ.

В этом посте мы рассмотрим IPython, инкапсуляцию и аргументы функций в Python.

IPython

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

Теперь весь код Python, который вы увидите, можно поместить в файл (назовем его my_script) и выполнить, написав

python my_script.py

Но если вы просто пробуете что-то, вы можете предпочесть интерактивный интерпретатор python, потому что он больше подходит для опробования (подумайте о пробах и ошибках).

Теперь IPython похож на интерактивный интерпретатор Python на стероидах. Он делает в основном то же самое, но лучше и с лучшим пользовательским интерфейсом.

Как и любой пакет python, вам просто нужно установить его с помощью pip, pipenv или любого другого менеджера пакетов, который вы используете.

$ pip install ipython

и запустить его, написав

$ ipython

Некоторые из функций ipython - это подсветка синтаксиса и автозаполнение (с помощью клавиши табуляции)

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

Теперь мы можем просто получить время безотказной работы в нашем интерпретаторе ipython и делать с ним все, что захотим:

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

Инкапсуляция

Большинство (если не все) объектно-ориентированных языков предлагают способ инкапсуляции атрибутов объекта. Инкапсуляция заключается в определении способа регулирования доступа и модификации атрибутов. Python, будучи многопарадигмальным языком (да, всемогущий python занимается объектно-ориентированным, функциональным и процедурным программированием), также предлагает способ сделать это, но несколько иначе, чем, например, Java или C #.

Во-первых, python не предлагает параметры области видимости переменных, как в Java (например, частный, общедоступный, защищенный). Вместо этого в python все по умолчанию является общедоступным, и чтобы объявить переменную / атрибут / что-то частное, вам просто нужно добавить к нему ведущее подчеркивание.

Теперь помните, что ведущий балл = частный является условным. В отличие от Java, эти атрибуты private можно использовать так же, как и любые другие атрибуты (но не следует!). Python построен на принципах; на доверии и вере, ведь «мы все здесь взрослые по согласию. В любом случае, если вы бесстыдны и достаточно смелы, чтобы использовать частные переменные, когда вы не должны их использовать, через некоторое время вы можете получить немного, потому что разработчик этих частных переменных не будет рассматривать ваш вариант использования в внимание при обновлении своего кода, и он может легко сломать старый код. (Кстати, даже в Java вы можете получить доступ к частным атрибутам с помощью методов интроспекции, но это далеко не тема этой статьи. Я просто хотел сказать, что инкапсуляция на любом языке предназначена для помощи разработчиков, чтобы не выводить их из строя. Если они упрямы, они могут получить доступ даже к самому закрытому атрибуту из существующих).

Правильный способ использовать частные переменные - использовать getters и setters, которые в Python имеют аккуратное именование и реализацию: свойства.

Обычно, если вы объявляете переменную как свойство (используя декоратор @property для геттера и декоратор @<property_name>.setter для сеттера), вы можете добавлять к нему геттеры и сеттеры. Вы можете использовать его как обычный атрибут, но на самом деле все обращения к нему маршрутизируются через геттер и сеттер. Вот небольшой пример:

И если воспользоваться нашим излишне милым существом Хууманом:

Вы поняли! (я надеюсь)

Аргументы

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

Если вы когда-либо сталкивались с функцией, которая принимает в качестве аргументов *args и **kwargs, это просто означает, что функция принимает произвольное количество позиционных аргументов и аргументов ключевого слова.

Но давайте начнем с простого примера: давайте рассмотрим эту (не) реалистичную функцию:

Пользоваться им довольно просто:

Но что, если я не хочу называть свой возраст. Что ж, мы можем сделать возраст необязательным аргументом, присвоив ему значение по умолчанию, но аргументы со значениями по умолчанию всегда идут после аргументов без него. Итак, наша функция станет такой:

50% шанс? это чертовски хорошо. Но о, мы по ошибке перевернули позиции country и job аргументов. При использовании позиционных аргументов вы должны убедиться, что вы передаете параметры в правильном порядке, в противном случае вам нужно указать имя аргумента, которое превращает их в аргументы ключевого слова

* аргументы и ** kwargs

Если вы когда-либо сталкивались с функцией, которая принимает в качестве аргументов *args и **kwargs, это просто означает, что функция принимает произвольное количество позиционных аргументов и аргументов ключевого слова.

Давайте представим, что вы мастер в покемонов и хотите поймать много покемонов. Вы собираетесь поймать так много покемонов, что даже не знаете, сколько вы собираетесь поймать, поэтому вы решаете создать функцию для ловли произвольного количества покемонов. А поскольку вы мастер, вы можете даже поймать покемона более одного раза, вам просто нужно указать, сколько раз вы хотите его поймать. Я не сомневаюсь, что вы напишете такую ​​функцию:

До следующего поста наслаждайтесь ловлей покемонов, когда они разорены! :)

つづく

ОБНОВЛЕНИЕ: Часть III вышла