В индустрии программного обеспечения есть общее высказывание, которое идет:
Я хочу нанять ленивого разработчика, потому что он найдет способ справиться с трудными проблемами в самом коротком и простой манере.
Я не был там в первый раз, когда это было сказано, но слухи говорят, что эти слова принадлежат Билл Гейтс .
Я не знаю, будет ли мистер Гейтс когда -нибудь нанять меня (подмигивание), но я должен признать, что наличие такого роста время от времени привело меня к созданию интересных и экономии времени/сценариев/обходных путей.
Спасибо, Ларри:)
Как вы можете увидеть мой профиль, я большой поклонник Python. Мне нравится отличная комбинация элегантности, силы и расширяемости, которую язык обеспечивает без скидок. Я заметил, хотя, шаблон код, на этом языке, на этом языке, на этом языке.
Этот шаблон заключался в том, что при вводе функции 1) мы регистрируем это событие, обычно для отладки и 2) несколько раз нам нужно справиться с потенциально поднятым исключением, иногда тривиальным образом, как ниже.
import os try: os.remove(a_file) except: print('exception raised')
И, как и во всех ‘ленивый’ Программисты на этой прекрасной планете, я не фанат кода шаблона.
Вот как я заставил себя (ленивые люди заставляют себя?) Найти Удобный решение. Что, кстати, тоже имеет ленивое имя: Catslog, Как несколько кошек вдохновили много мемов на лень.
Технические вещи
Решение включает в себя фантастическую особенность декораторов. Мне так нравится, что вместо фильмов я читаю код с декораторами (и различными другими функциями Python)
Извините, это была очень плохая шутка
В более серьезной ноте я не буду здесь погружаться в декораторы, так как вокруг вас уже есть огромная коллекция отличных статей, но я настоятельно рекомендую вам прочитать о них, если вы не знакомы. Как эта классика праймер Анкет
Но если вы … ленивый (без каламбура) и не хотите тратить время на это, достаточно знать, что:
Декоратор – это функция, которая расширяет другую функцию (давайте назовем ее Foo) и заменяет оригинальную ссылку Foo на расширенную.
Немного похоже на пример ниже:
def foo(): # Various operations going on foo = my_decorator(foo)
Вернемся к моей пакете, основной логики можно увидеть ниже:
from functools import wraps def catslog(f): """Given a function f, run it, log the execution and handle any potential exceptions""" [@wraps](http://twitter.com/wraps)(f) def wrapped(*args, **kwargs): """The extended version of the function f""" try: func_name = f.__name__ print('Executing function {} with args: {} and kwargs: {}' .format(func_name, args, kwargs)) f(*args, **kwargs) except Exception as e: print("""An error occurred while executing function "{}". The error is {}""".format(func_name, str(e))) return wrapped
Это все. Действительно ленивое решение, чтобы пережить мою лень.
Короче говоря, мы создаем функцию, которая создает другую функцию, которая расширяет нашу оригинал (декораторы в одной линии, как объяснено выше).
Код можно использовать как:
# First import the package from catslog import catslog # Then, decorate a target function @catslog def cats_me_if_you_can(*args, **kwargs): # Moar code
Разве у вас нет других, чтобы делать в своей жизни, Периклис?
Но зачем публиковать это, спросите вы? Прежде всего, ленивый фактор (опять же? #о, Боже, почему); Я могу использовать его в любой среде разработчика, которую я могу работать, без суеты. И, конечно же, это чрезвычайно полезно отдавать сообществу, которое так полезно, поддерживающее и полное первоклассных инженеров.
Это все люди
Спасибо, что достигли самых темных глубин этой статьи. Я надеюсь, что вам понравилось читать это, так же, как мне понравилось процесс создания пакета и написания этой статьи.
Я почти уверен, что у вас есть фрагмент кода, который вы, скорее всего, копируете), который стоит поделиться, и я настоятельно рекомендую вам публиковать его, даже если он не в Python.
Более подробную информацию о проекте можно найти на GitHub Страница проекта. Как всегда, не стесняйтесь спрашивать что -нибудь в разделе комментариев.
Оригинал: “https://dev.to/perigk/how-being-lazy-led-me-to-publicize-my-first-python-package-36di”