Pep 8 — руководство по написанию кода на python

Содержание:

Работаем с pyflakes

Проект pyflakes это часть чего-то, что называется Divmod Project. Pyflakes на самом деле не выполняет проверяемый код также, как и pylint. Вы можете установить pyflakes при помощи pip, easy_install, или из другого источника.

Мы начнем с запуска pyflakes в изначальной версии той же части кода, которую мы использовали для проверки pylint. Вот и он:

Python

import sys

class CarClass:
«»»»»»

def __init__(self, color, make, model, year):
«»»Constructor»»»
self.color = color
self.make = make
self.model = model
self.year = year

if «Windows» in platform.platform():
print(«You’re using Windows!»)

self.weight = self.getWeight(1, 2, 3)

def getWeight(this):
«»»»»»
return «2000 lbs»

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

importsys

classCarClass

«»»»»»

def__init__(self,color,make,model,year)

«»»Constructor»»»

self.color=color

self.make=make

self.model=model

self.year=year

if»Windows»inplatform.platform()

print(«You’re using Windows!»)

self.weight=self.getWeight(1,2,3)

defgetWeight(this)

«»»»»»

return»2000 lbs»

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

Python

c:\py101>c:\Python34\Scripts\pyflakes.exe crummy_code.py
crummy_code.py:1: ‘sys’ imported but unused
crummy_code.py:13: undefined name ‘platform’

1
2
3

c\py101>c\Python34\Scripts\pyflakes.exe crummy_code.py

crummy_code.py1’sys’imported but unused

crummy_code.py13undefined name’platform’

Несмотря на суперски быструю скорость возврата выдачи, pyflakes не нашел все ошибки. Вызов метода getWeight передает слишком много аргументов, также метод getWeight сам по себе определен некорректно, так как у него нет аргумента self. Что-же, вы, собственно, можете называть первый аргумент так, как вам угодно, но в конвенции он всегда называется self. Если вы исправили код, оперируя тем, что вам сказал pyflakes, код не заработает, несмотря на это.

Как применять линтеры?

  • Запускаете линтеры. Это очень быстро и не нужно ничего, кроме исходного кода — ни инфраструктуры, ни настроек. Проверяете: первый sanity check прошел — все хорошо, работаем дальше.
  • Стадия тестов. Этот процесс сложнее и дольше из-за ошибок, не связанных с кодом. Нам уже потребуется правильный и полный сетап всего приложения.
  • Этап ревью.

Это необходимые шаги

Pylint

Почему не Pylint?Он смешивает всё воедино: стилистические проверки, проверки Best practices и Type checkingу Pylint собственная реализация Abstract syntax tree в Python

SonarQube

  • SonarQube не получится часто запускать: его нужно куда-то задеплоить, смотреть, мониторить, настраивать.
  • Он написан на Java. Если захотите поправить свой линтер для Python, то будете писать код на Java. Я считаю, что концептуально это неправильно — разработчик, который умеет писать на Python, должен уметь написать код для проверки Python.

Самый строгий линтер в мире

wemake-python-styleguideOpen Source by Default — это хорошая практика«Самый строгий линтер в мире!»250 разных проверок в обоих категориях нет компромиссов не требует настроек (WIP)

2.2.2. Написание программ¶

Для запуска интерпретатора Python откройте терминал и введите команду (или ), после чего интерпретатор будет запущен и перейдет в интерактивный режим, ожидая ввода команд (Рисунок 2.2.12).

Рисунок 2.2.12 — Запуск интерпретатора Python

После ввода команды ее необходимо подтвердить нажатием клавиши <ENTER>. При этом, если команда подразумевает возврат какого-либо результата, интерпретатор автоматически отобразит его в консоли (Рисунок 2.2.13).

Рисунок 2.2.13 — Ввод команд и отображение результата

Введите в консоли по очереди команды, приведенные в Листинге 2.2.1. Комментарии вводить не обязательно. Один из возможных результатов выполнения приведен на Рисунке 2.2.14.

Листинг 2.2.1 — Пример программы на языке Python |

print("Решение кв. уравнения | ax^2 + bx + c = 0")

a = int(input("a="))  # Вводим с клавиатуры целое число и
b = int(input("b="))  # связываем с определенной переменной
c = int(input("c="))

d = b**2 - 4*a*c  # Рассчитываем дискриминант,  указывает на результат

d  # Отображаем полученное значение (только в интерактивной консоли!)

# Выводим решение в зависимости от значения дискриминанта
if d < 
    print("Решений нет")
elif d == 
    x = -b  (2*a)
    print("x =", x)
else
    x1 = (-b - d**0.5)  (2*a)
    x2 = (-b + d**0.5)  (2*a)
    print("x1 =", x1, " x2 =", x2)

Рисунок 2.2.14 — Результат ввода программы в интерактивном режиме

Даже если не знать синтаксис Python, благодаря его «простоте», можно понять, что происходит в программе.

Indentation

Use 4 spaces per indentation level.

Continuation lines should align wrapped elements either vertically
using Python’s implicit line joining inside parentheses, brackets and
braces, or using a hanging indent . When using a hanging
indent the following should be considered; there should be no
arguments on the first line and further indentation should be used to
clearly distinguish itself as a continuation line:

# Correct:

# Aligned with opening delimiter.
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

# Add 4 spaces (an extra level of indentation) to distinguish arguments from the rest.
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)

# Hanging indents should add a level.
foo = long_function_name(
    var_one, var_two,
    var_three, var_four)
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)

The 4-space rule is optional for continuation lines.

Optional:

# Hanging indents *may* be indented to other than 4 spaces.
foo = long_function_name(
  var_one, var_two,
  var_three, var_four)

When the conditional part of an if-statement is long enough to require
that it be written across multiple lines, it’s worth noting that the
combination of a two character keyword (i.e. if), plus a single space,
plus an opening parenthesis creates a natural 4-space indent for the
subsequent lines of the multiline conditional. This can produce a visual
conflict with the indented suite of code nested inside the if-statement,
which would also naturally be indented to 4 spaces. This PEP takes no
explicit position on how (or whether) to further visually distinguish such
conditional lines from the nested suite inside the if-statement.
Acceptable options in this situation include, but are not limited to:

# No extra indentation.
if (this_is_one_thing and
    that_is_another_thing):
    do_something()

# Add a comment, which will provide some distinction in editors
# supporting syntax highlighting.
if (this_is_one_thing and
    that_is_another_thing):
    # Since both conditions are true, we can frobnicate.
    do_something()

# Add some extra indentation on the conditional continuation line.
if (this_is_one_thing
        and that_is_another_thing):
    do_something()

(Also see the discussion of whether to break before or after binary
operators below.)

The closing brace/bracket/parenthesis on multiline constructs may
either line up under the first non-whitespace character of the last
line of list, as in:

my_list = 
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
    )

or it may be lined up under the first character of the line that
starts the multiline construct, as in:

F-строки (Python 3.6+)

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

Python

user = «Андрей»
action = «покупка»

log_message = ‘Пользователь {} зашел на сайт и выполнил действие: {}’.format(
user,
action
)

print(log_message)
# Пользователь Андрей зашел на сайт и выполнил действие: покупка

1
2
3
4
5
6
7
8
9
10

user=»Андрей»

action=»покупка»

log_message=’Пользователь {} зашел на сайт и выполнил действие: {}’.format(

user,

action

)
 

print(log_message)

# Пользователь Андрей зашел на сайт и выполнил действие: покупка

Наряду с , Python 3 предоставляет гибкий способ выполнения интерполяции строк через f-строки. Тот же код, что и показанный выше, с использованием f-strings выглядит так:

Python

user = «Юрий»
action = «продажа»

log_message = f’Пользователь {user} зашел на сайт и выполнил действие: {action}’

print(log_message)
# Пользователь Юрий зашел на сайт и выполнил действие: продажа

1
2
3
4
5
6
7

user=»Юрий»

action=»продажа»

log_message=f’Пользователь {user} зашел на сайт и выполнил действие: {action}’

print(log_message)

# Пользователь Юрий зашел на сайт и выполнил действие: продажа

defaultdict

defaultdict

  • он принимает первым аргументом производящую функцию; и
  • когда ключ словаря встречается в первый раз, вызывается производящая функция, а ее результатом инициализируется значение нового элемента словаря.
  • импортировать модуль collections и ссылаться через имя этого модуля,
  • или импортировать непосредственно имя defaultdict:
import collections
d = collections.defaultdict(...)
from collections import defaultdict
d = defaultdict(...)
from collections import defaultdict

equities = defaultdict(list)
for (portfolio, equity) in data:
    equities.append(equity)
navs = defaultdict(int)
for (portfolio, equity, position) in data:
    navs += position * prices

cmath[править]

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

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

Переход к полярным координатам и обратноправить

Комплексное число z может быть представлено в Декартовой системе координат в представлении, что действительная z.real часть откладывается по оси x, а мнимая z.imag — по оси y. Само число z записывается:

z = z.real + z.imag*1j

Полярные координаты позволяют представить комплексное число другим образом — в виде радиуса ρ и фазового угла φ. Координата ρ определяет расстояние от точки до полюса, координата φ — угол между полярной осью и отрезком, соединяющим полюс и рассматриваемую точку.

Следующие функции могут быть использованы для перехода от исходных прямоугольных координат к полярным:

  • cmath.phase

    Возвращает фазовый угол φ для числа x, phase(x) эквивалентно math.atan2(x.imag, x.real). Результат лежит в интервале .

    (x)

  • cmath.polar

    Возвращает представление x в полярных координатах, то есть возвращает пару (r, phi).

    (x)

  • cmath.rect(r, phi)

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

    (x)

Другие функцииправить

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

Константыправить

  • cmath.pi
  • cmath.e

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

Что нужно знать Python-разработчику?

Пласт базовых знаний и навыков включает в себя:

  • основные навыки пользования терминалом;
  • понимание принципа работы IDE;
  • навыки работы с Git;
  • менеджер пакетов pip;
  • базы данных (ORM, CRUD-операции);
  • принципы ООП;
  • синтаксис языка Python;
  • алгоритмы и структуры данных;
  • составление документации;
  • модульное тестирование.

Разумеется, недостаточно реализовать вывод «Hello World», чтобы разобраться в языке программирования Python, но для более глубокого понимания сперва стоит определиться с направлением, в котором вы хотите работать. Исходя из этого, подбираются дополнительные инструменты для изучения.

Веб-разработка

Здесь особенно популярны такие Python-фреймворки, как Django и Flask: с их помощью можно быстро создать логику бэкенда. Для начала работы хватит и одного, но не помешает знать несколько, понимать, в каких случаях они используются, где предпочесть Django, а с какой задачей лучше справится Flask, Tornado или Pyramid.

Для построения веб-приложений также пригодится знание протоколов, HTML, CSS и JavaScript.

Django — популярный Python-фреймворк для написания веб-приложений. Многие начинающие разработчики выбирают его из-за относительной простоты и лёгкости в развитии. Однако это совсем не означает, что фреймворк не справится с профессиональными высоконагруженными системами.

В рамках этого курса вы поэтапно изучите процесс создания полноценного приложения на Django. Помимо работы с основными компонентами фреймворка, вы научитесь грамотно подбирать и интегрировать сторонние библиотеки. Эта книга лишена непонятных, скучных и абстрактных задач — в ней только то, что вам действительно пригодится на практике.

В процессе обучения вы получите не только знания о принципах работы Django, но и опыт в разработке веб-приложений, которые в перспективе планируется расширять дополнительными инструментами.

Полезно как для начинающих разработчиков, так и для специалистов.

В данном издании вы изучите Python-фреймворк Flask. Он относится к категории микрофреймворков — простых каркасов для веб-приложений, обладающих только базовыми возможностями. Благодаря пошаговым примерам вы сможете создать полноценное веб-приложение для социального блогинга.

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

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

Data Science

Основы программирования на Python в разрезе Data Science следует продолжить изучением таких библиотек и фреймворков:

  • NumPy
  • TensorFlow
  • Keras
  • Pandas
  • PyTorch
  • Matplotlib
  • scikit-learn

Для погружения в Machine Learning на Python, обучение стоит начать с основных разделов, а именно:

  • обучение с учителем;
  • обучение без учителя;
  • обучение с подкреплением.

Книги по теме

Хороша та книга, которая учит использовать мощные алгоритмы в машинном обучении без интеграции затратных решений или массивных вычислительных систем. Данное издание как раз об этом.

Благодаря этой книге вы познакомитесь с Scikit-Learn и научитесь работать с нейросетями с помощью библиотек Theano, TensorFlow и H2O. В процессе вы рассмотрите классификационные и регрессионные деревья, а также способы обучения нейросетей без учителя.

В книге рассмотрены принципы машинного обучения в модели MapReduce на Hadoop и Spark.

В данной книге описаны самые различные вычислительные методы и статистические алгоритмы. Без их использования невозможна какая-либо интенсивная обработка данных и проведение исследований.

Данное пособие будет полезно тем читателям, которые уже имеют какой-либо опыт в программировании и хотят научиться правильно использовать Python в Data Science. Например, как преобразовывать определённый формат данных в файл скрипта? Как сформировать и отфильтровать эти данные и работать с ними? Как благодаря полученной информации проанализировать ситуацию, составить статистическую модель и организовать машинное обучение.

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

А теперь вернёмся к тем особенностям, которые были изложены в начале статьи

1. Использование генератора дважды

В данном примере, список будет содержать элементы только в первом случае, потому что генераторное выражение — это итератор, а итераторы, как мы уже знаем — сущности одноразовые. И при повторном использовании не будут отдавать никаких элементов.

2. Проверка вхождения элемента в генератор

А теперь дважды проверим, входит ли элемент в последовательность:

В данном примере, элемент будет входить в последовательность только 1 раз, по причине того, что проверка на вхождение проверяется путем перебора всех элементов последовательности последовательно, и как только элемент обнаружен, поиск прекращается. Для наглядности приведу пример:

Как мы видим, при создании списка из генераторного выражения, в нём оказываются все элементы, после искомого. При повторном же создании, вполне ожидаемо, список оказывается пуст.

3. Распаковка словаря

При использовании в цикле , словарь будет отдавать ключи:

Так как распаковка опирается на тот же протокол итератора, то и в переменных оказываются именно ключи:

От кого зависим?

  • Flake8.
  • Eradicate — классный плагин, который находит закомментированные фрагменты в коде и заставляет вас их удалять, потому что хранить мёртвый код в проекте — это плохо. Мы не разрешаем так делать.
  • Isort — инструмент, который заставляет правильно сортировать импорты: по порядку, делая отступы, красивые кавычки.
  • Bandit — замечательная утилита для проверки безопасности кода статически. Находит вшитые пароли, корявые использования в коде, вызовы , и говорит, что это все нельзя использовать, а если хочется, — то просит написать причину.
  • И ещё больше 20 плагинов, которые занимаются проверкой скобок, кавычек и запятых.

Should a Line Break Before or After a Binary Operator?

For decades the recommended style was to break after binary operators.
But this can hurt readability in two ways: the operators tend to get
scattered across different columns on the screen, and each operator is
moved away from its operand and onto the previous line. Here, the eye
has to do extra work to tell which items are added and which are
subtracted:

# Wrong:
# operators sit far away from their operands
income = (gross_wages +
          taxable_interest +
          (dividends - qualified_dividends) -
          ira_deduction -
          student_loan_interest)

To solve this readability problem, mathematicians and their publishers
follow the opposite convention. Donald Knuth explains the traditional
rule in his Computers and Typesetting series: «Although formulas
within a paragraph always break after binary operations and relations,
displayed formulas always break before binary operations» .

Following the tradition from mathematics usually results in more
readable code:

# Correct:
# easy to match operators with operands
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

Протоколы

Такие термины как «протокол итератора» или «протокол дескрипторов» уже привычны и используются давно.
Теперь можно описывать протоколы в виде кода и проверять их соответствие на этапе статического анализа.

Стоит отметить, что начиная с Python 3.6 в модуль typing уже входят несколько стандартных протоколов.
Например, (требующего наличие метода ), (требует ) и некоторых других.

Описание протокола

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

Мы можете комбинировать протоколы с помощью наследования, создавая новые.
Однако в этом случае вы так же должны явно указать Protocol как родительский класс

Дженерики, self-typed, callable

Протоколы как и обычные классы могут быть Дженериками. Вместо указания в качестве родителей и можно просто указать

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

Проверки в рантайме

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

Однако такая возможность имеет ряд ограничений на использование. В частности, не поддерживаются дженерики

Public and Internal Interfaces

Any backwards compatibility guarantees apply only to public interfaces.
Accordingly, it is important that users be able to clearly distinguish
between public and internal interfaces.

Documented interfaces are considered public, unless the documentation
explicitly declares them to be provisional or internal interfaces exempt
from the usual backwards compatibility guarantees. All undocumented
interfaces should be assumed to be internal.

To better support introspection, modules should explicitly declare the
names in their public API using the __all__ attribute. Setting
__all__ to an empty list indicates that the module has no public API.

Even with __all__ set appropriately, internal interfaces (packages,
modules, classes, functions, attributes or other names) should still be
prefixed with a single leading underscore.

An interface is also considered internal if any containing namespace
(package, module or class) is considered internal.

Обработка ошибок

Всегда хорошо реализовать обработку ошибок. Это не только поможет избежать неожиданного выхода скрипта, но также помоет вести журнал ошибок и уведомлений. Используя запросы Python, я предпочитаю ловить ошибки следующим образом:

Попробуйте:

Python

try:
# Логика нашего парсера.
r = requests.get(‘https://python-scripts.com’)

except requests.ConnectionError as e:
print(«OOPS!! Connection Error. Make sure you are connected to Internet. Technical Details given below.\n»)
print(str(e))
except requests.Timeout as e:
print(«OOPS!! Timeout Error»)
print(str(e))
except requests.RequestException as e:
print(«OOPS!! General Error»)
print(str(e))
except KeyboardInterrupt:
print(«Someone closed the program»)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

try

# Логика нашего парсера.

r=requests.get(‘https://python-scripts.com’)

exceptrequests.ConnectionError ase

print(«OOPS!! Connection Error. Make sure you are connected to Internet. Technical Details given below.\n»)

print(str(e))

exceptrequests.Timeout ase

print(«OOPS!! Timeout Error»)

print(str(e))

exceptrequests.RequestException ase

print(«OOPS!! General Error»)

print(str(e))

exceptKeyboardInterrupt

print(«Someone closed the program»)

Проверьте последнюю часть кода. В ней программе указывается, что если кто-нибудь хочет завершить программу через Ctrl+C, то содержимое сначала оборачивается, после чего выполняется. Эта ситуация хороша, если вы храните информацию в файле и хотите сбросить все в момент выхода.

Как выполняются Python-скрипты?

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

При запуске скрипта интерпретатор Python проходит сверху вниз, выполняя каждую из них. Именно таким образом происходит выполнение кода.

Но и это еще не все.

Блок-схема выполнения кода интерпретатором

  • Шаг 1: скрипт или .py-файл компилируется, и из него генерируются бинарные данные. Готовый файл имеет расширение .pyc или .pyo.
  • Шаг 2: генерируется бинарный файл. Он читается интерпретатором для выполнения инструкций.

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

Иногда полезно изучать байткод

Если вы планируете стать опытным Python-программистом, то важно уметь понимать его для написания качественного кода

Это также пригодится для принятия решений в процессе

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

Настройте заголовки

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

Однажды я столкнулся с ситуацией: HTML, который я видел в браузере отличался от того, который был в моем скрипте. Так что делать запросы настолько правильными, насколько вы можете – очень хорошая практика. Меньшее, что вы должны сделать – это установить User-Agent.

Python

headers = {
‘user-agent’: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36’
}

r = requests.get(url, headers=headers, timeout=5)

1
2
3
4
5

headers={

‘user-agent»Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36’

}
 

r=requests.get(url,headers=headers,timeout=5)

Как запускать Python-скрипты?

Для запуска Python-скрипта с помощью командной строки сначала нужно сохранить код в локальный файл.

Возьмем в качестве примера файл, который был сохранен как python_script.py. Сохранить его можно вот так:

  • Создать Python-скрипт из командной строки и сохранить его,
  • Создать Python-скрипт с помощью текстового редактора или IDE и сохранить его. Просто создайте файл, добавьте код и сохраните как «python_script.py»

Сохранить скрипт в текстовом редакторе достаточно легко. Процесс ничем не отличается от сохранения простого текстового файла.

Но если использовать командную строку, то здесь нужны дополнительные шаги. Во-первых, в самом терминале нужно перейти в директорию, где должен быть сохранен файл. Оказавшись в нужной папке, следует выполнить следующую команду (на linux):

После нажатия Enter откроется интерфейс командной строки, который выглядит приблизительно следующим образом:

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

Как запускать скрипт в командной строке?

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

Замените на , если хотите использовать версию Python2.x.

Вот что будет храниться в самом файле python_script.py:

Копировать

Вывод в командной строке будет следующим:

Предположим, что нужно сохранить вывод этого года (0, 1, 2, 3, 4). Для этого можно использовать оператор .

Это делается вот так:

После этого будет создан файл «newfile.txt» с сохраненным выводом.

Перечисления 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

Инструмент 1: ИИ автодополнение и быстрый доступ к документации с Kite

У современных IDE есть встроенное автозаполнение, которое выглядит примерно так:

Встроенный инструмент обычно использует документацию для определения имён и типов возможных функций и параметров. Но что если редактор получит доступ к коду из всех публичных репозиториев GitHub и начнёт подтягивать не просто имена, а целые строки кода? И это реализовано в Kite.

Прим.ред. Такая функциональность доступна в планах Pro и Team. На момент написания материала для плана Pro действует бесплатная бета-версия.

Разберём подробнее особенности Kite — инструмента для Python с функциями умного автодополнения и быстрого доступа к документации.

Умные подсказки

Плагин Kite смотрит в комплексе ваш код, переменные, часто используемые имена параметров, документацию, и только после сбора всех данных рекомендует что-то вроде этого:

Если хотите, .

Copilot для документации

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

Kite Copilot упрощает поиск по документации. Он работает параллельно с IDE и показывает информацию о любых объектах или функциях, на которые наведён курсор.

Работает локально, приватно

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

Это крайне важно для людей с плохим интернет-соединением и тех, кто работает с закрытым исходным кодом

Подведем итоги

Следующим шагом должна быть попытка запуска pylint и pyflakes в вашем собственном коде, либо же в пакете Python, вроде SQLAlchemy, после чего следует изучить полученные в выдаче данные. Вы можете многое узнать о своем коде, используя данные инструменты. pylint интегрирован с Wingware, Editra, и PyDev. Некоторые предупреждения pylint могут показаться вам раздражительными, или не особо уместными. Существует несколько способов избавиться от таких моментов, как предупреждения об устаревании, через опции командной строки. Вы также можете использовать -generate-rcfile для создания примера файла config, который поможет вам контролировать работу pylint

Обратите внимание на то, что pylint и pyflakes не импортируют ваш код, так что вам не нужно беспокоиться о нежелательных побочных эффектах

Добавить комментарий

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