Size: a a a

Хирьянов Т.Ф., Практика программирования на Python 3 (2019)

2019 October 22

А!

А !_! in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
📃 Основы Git и GitHub для тех, кому интересно, но мало что понятно. Бонус - пошаговое руководство по первому участию в open-source проекте! В первой части статьи поговорим об установке, основных командах Git и работе с терминалом.

https://nuancesprog.ru/p/5243

@nuancesprog #статьи #GitHub
источник

4

404 in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
А !_!
📃 Основы Git и GitHub для тех, кому интересно, но мало что понятно. Бонус - пошаговое руководство по первому участию в open-source проекте! В первой части статьи поговорим об установке, основных командах Git и работе с терминалом.

https://nuancesprog.ru/p/5243

@nuancesprog #статьи #GitHub
Спасибо!
источник

SM

S. Morze in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
📃 Невозможно стать крутым разработчиком на одной теории, без применения ее на практике. Предлагаем решить 5 заковыристых задач для закрепления знаний в Python

https://nuancesprog.ru/p/4567

@nuancesprog #статьи #Python #DataScience
источник

SM

S. Morze in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
И вот,к слову, о декораторах.
источник

SM

S. Morze in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
​​🌷Декораторы: часть 1

Вероятно, почти каждый разработчик на Python сталкивался с декораторами, видя конструкцию с со знаком @:

@app.route('/')
def index():
   return "Hello, World!"


Разберемся, что такое декоратор, и как он работает. Этот вопрос часто спрашивают на собеседованиях.

Декоратор – это функция, которая принимает как аргумент другую функцию. Цель декоратора – расширить функциональность переданной ему функции без непосредственного изменения кода самой функции. Вот и все!
* Примечание: декорировать можно класс, и декоратором может быть тоже класс, но об этом в другой раз!

В Python функция – тоже объект, и ее можно передавать как аргумент, возвращать из другой функции, ей также можно назначать атрибуты.

Символ собачка (@) – всего лишь синтаксический сахар:

@decorator
def foo():
   ...


# эквивалентно:

def foo():
   ...
foo = decorator(foo)


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

def decorator(f):
   return f


А можно вернуть и вообще другую функцию. Например, определенную внутри декоратора (да, внутри функций можно определять другие функции):

def decorator(f):
   def inner():
       print('inner')
   return inner


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

def decorator(f):
   def inner():
       print('begin')
       f()
       print('end')
   return inner


@decorator
def foo():
   print('foo')

foo()


Выдаст:

# begin foo
# foo
# end foo


Продолжу тему в следующих постах.
источник

SM

S. Morze in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
🌷 Декораторы: wraps

Продолжаем тему. Часто неизвестно, какие аргументы принимает декорируемая функция f. Поэтому эти аргументы обычно обобщают, называя их *args (все позиционные аргументы, как список), **kwargs (все именованные аргументы, как словарь). Эти две штуки охватывают все возможные аргументы. Также у функции может быть возвращаемое значение, которое неплохо бы вернуть из inner. Улучшим наш декоратор, добавив прозрачную передачу любых (заранее неизвестных) аргументов и возвращение результата выполнения функции:

def decorator(f):
   def inner(*args, **kwargs):
       print('begin')
       result = f(*args, **kwargs)
       print('end')
       return result
   return inner

@decorator
def foo(x, y):
   print(f'summing {x} and {y}...')
   return x + y

print(foo(5, y=10))
# begin
# summing 5 and 10...
# end
# 15

Помимо кода функции и ее аргументов, у нее также есть и другие свойства, например ее настоящее имя и «docstring» (это строчка с описанием функции в начале ее тела, которая хранится потом в атрибуте __doc__ и выводится при вызове help). Декоратор из прошлого примера потеряет документацию и имя функции (она станет зваться inner):

@decorator
def foo(x, y):
   """Doc string here"""
   return x + y

help(foo)
# Help on function inner in module main:
# inner(*args, **kwargs)

Для того, чтобы предотвратить потерю атрибутов декорированной функции есть декоратор wraps в модуле functools. И да, это еще один декоратор, которым мы декорируем inner в нашем декораторе. Вот теперь название и документация поступят в обертку из оригинальной функции:

from functools import wraps

def decorator(f):
   @wraps(f)
   def inner(*args, **kwargs):
       print('begin')
       result = f(*args, **kwargs)
       print('end')
       return result
   return inner

@decorator
def foo(x, y):
   """Doc string here"""
   return x + y

help(foo)
# Help on function foo in module main:
# foo(x, y)
#    Doc string here

Композиция декораторов

Можно применить несколько декораторов к одной функции. Вообще говоря, результат зависит от порядка следования декораторов: тот, что ближе к определению функции воздействует на нее раньше того, что дальше. Пример декораторов для пары HTML тэгов (для простоты я опустил формальности передачи аргументов и атрибутов из предыдущего раздела). foo и bar декорированы в разном порядке:

def bold(f):
   def inner():
       return '<b>' + f() + '</b>'
   return inner

def italic(f):
   def inner():
       return '<i>' + f() + '</i>'
   return inner

@bold
@italic
def foo():
   return 'foo text'

@italic
@bold
def bar():
   return 'bar text'

print(foo())  # <b><i>foo text</i></b>
print(bar())  # <i><b>bar text</b></i>


И результат разный, потому что по сути:

foo = italic(bold(foo))
bar = bold(italic(bar))


В следующем посте я расскажу о декораторах с параметрами (там будут трех-этажные функции).
Эта заметка доступна также на сайте.
источник

SM

S. Morze in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
🌷 Декораторы с параметрами

Простые декораторы мы научились делать, но как передать в них параметр?

@repeat(n=5)
def foo():
   print('foo')


Нужно обернуть объявление декоратора еще в одну функцию, принимающую эти параметры:

from functools import wraps

def repeat(n=5):
   def _repeat(f):
       @wraps(f)
       def inner(*args, **kwargs):
           for _ in range(n):
               f(*args, **kwargs)
       return inner
   # не забываем ее вернуть!
   return _repeat


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

Как это работает, подробнее я рассказал в статье по кнопке. Еще там показано, как создать универсальный декоратор, работающий с параметрами и без. Я, наконец-то, прикрутил превью к сайту, поэтому открывать статьи стало супер удобно!
источник

SM

S. Morze in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
источник

SM

S. Morze in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
источник

A

Aleksey in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Доброе утро. Написал, что то на qpython. А возможно ли из этого сделать приложение.
источник

c

ch405 in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Aleksey
Доброе утро. Написал, что то на qpython. А возможно ли из этого сделать приложение.
py2exe ?
источник

A

Aleksey in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Наверно.
источник

A

Aleksey in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
только почему 2?
источник

c

ch405 in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
py2exe = py to exe
источник

A

Aleksey in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
ладно, тут что бы понять два высших нужно. Будет где мозги размять
источник

o

o in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Aleksey
ладно, тут что бы понять два высших нужно. Будет где мозги размять
корочка != знания)
источник

A

Aleksey in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
выражение есть такое: Тут без 2 высших не разберёшся
источник

A

Aleksey in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
ну или без пол литру D
источник

Р

Рядовой Куча in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Здарова всем
источник

Р

Рядовой Куча in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Подскажите плз
источник