Реальный Код
хотелось написать сюда, но не знал о чем… 🤔 … и накидал скрипт, который считает статистику использования мною команд в терминале что получилось – ниже 👇 выше ☝️ можно такое на собесах спрашивать, чтобы больше узнать о человеке: чем пользуется, какой стек…
вот оформил код. Пробуйте и делитесь, что получилось у вас 🤗
https://github.com/DiPaolo/deepeasy-terminal-stats
#gitHub #sourceCode #link #python #terminal #stats
https://github.com/DiPaolo/deepeasy-terminal-stats
#gitHub #sourceCode #link #python #terminal #stats
🔥4🥰3❤2🤓1
finita la comedia
нет-нет, все хорошо, просто речь сегодня пойдет про ключевое слово (а точнее – аннотацию) final в питоне
надо сказать, что я лично узнал об этой фиче совсем недавно, тогда как в языке она присутствует с версии 3.8
ну и сразу дам ссылку на PEP – https://peps.python.org/pep-0591/
если говорить кратко – это аналог ключевого слова const в других языках. тем самым мы говорим, что значение переменной не будет меняться
хотя погодите! все ли так очевидно? давайте смотреть на примере…
вывод:
хммммм…. но как же так?! я же сам сказал, что это константа, как мы смогли поменять ее значение??
все дело в том, что мы должны помнить, питон – нетипизированный язык! и все эти задания типов, в том числе и рассматриваемая сегодня аннотация final – это не строгое правило, а лишь подсказка (так и называется – type hint) для IDE и для утилит статического анализа
то есть, в ИДЕшке-то оно вам подсветит возможную проблему, а статический анализатор навроде ruff – ругнется и скажет, что у вас ошибка в коде. при всем при это код вы сможете запустить и он будет изменять значение вашей переменной, обозначенной как final!
так что имейте ввиду эту особенность, ну и конечно крайне рекомендую – используйте аннотацию final везде, где только возможно. этим вы еще дополнительно скажете человеку, который будет читать ваш код, что это – константа, и не предполагается ее изменение. хотя, теперь вы знаете, что если очень хочется… 😁
#python #final
нет-нет, все хорошо, просто речь сегодня пойдет про ключевое слово (а точнее – аннотацию) final в питоне
надо сказать, что я лично узнал об этой фиче совсем недавно, тогда как в языке она присутствует с версии 3.8
ну и сразу дам ссылку на PEP – https://peps.python.org/pep-0591/
если говорить кратко – это аналог ключевого слова const в других языках. тем самым мы говорим, что значение переменной не будет меняться
хотя погодите! все ли так очевидно? давайте смотреть на примере…
from typing import Final
TEST = 11
print(f'TEST before: {TEST}')
TEST += 1
print(f'TEST after: {TEST}')
TEST_CONST: Final = 12
print(f'TEST_CONST before: {TEST_CONST}')
TEST_CONST += 1
print(f'TEST_CONST after: {TEST_CONST}')
вывод:
TEST before: 11
TEST after: 12
TEST_CONST before: 12
TEST_CONST after: 13
хммммм…. но как же так?! я же сам сказал, что это константа, как мы смогли поменять ее значение??
все дело в том, что мы должны помнить, питон – нетипизированный язык! и все эти задания типов, в том числе и рассматриваемая сегодня аннотация final – это не строгое правило, а лишь подсказка (так и называется – type hint) для IDE и для утилит статического анализа
то есть, в ИДЕшке-то оно вам подсветит возможную проблему, а статический анализатор навроде ruff – ругнется и скажет, что у вас ошибка в коде. при всем при это код вы сможете запустить и он будет изменять значение вашей переменной, обозначенной как final!
так что имейте ввиду эту особенность, ну и конечно крайне рекомендую – используйте аннотацию final везде, где только возможно. этим вы еще дополнительно скажете человеку, который будет читать ваш код, что это – константа, и не предполагается ее изменение. хотя, теперь вы знаете, что если очень хочется… 😁
#python #final
🤔3😱3👀3
я завалил собес по питону 😒
это было ожидаемо, на самом деле… ввиду моей особенности. те, кто знакомы со мной лично, могут знать: я очень плох в технических собесах
я могу что угодно написать: написать быстро, хорошо, качественно, практически на любом языке и независимо от фреймворка… я легко переключаюсь между языками и фреймворками, даже стеками… но на собесе… 😒😒😒 на собесе совсем не так
такая вот у меня особенность 🤷♂️ да, я хорош в практике и очень плох в теории. а готовиться-зубрить… ну честно говоря не хочется, да и смысла большого не вижу
вообще, собес был ну очень простой 🤦♂️
но вот эта моя особенность не позволила мне его пройти. но как сказал в начале – я особо и не возлагал на него надежд. позиция кстати была изначалльно на юнит-лида, но потом перешла на тимлида. так что да – это был собес по питону на тимлида
что ваще смешно: была задача, которую я сам делал 2 недели назад 😅 в своем рабочем коде. мне там понадобилось считать длительность отработки запроса, и я прикрутил декоратор, который это делает. ну прикрутил за 20 минут и забыл
да, так это работает у меня: я могу быстро найти решение, запилить его и дальше забыть. но при этом буду помнить, где, что, для чего и как в общих чертах я это делал
и тут они значит дают задачу: написать декоратор, который запускает функцию N раз и считает длительность ее выполнения. и я не смог его написать! 😩 я помнил, когда, где и для чего писал такой же декоратор, а вот вспомнить наизусть синтаксис я не смог 🤷♂️
короче, такие у меня дела…
это я все к чему… ну во-первых, поделиться с вами. во-вторых, вас ждут решения этих задач 😅
#python #собес
это было ожидаемо, на самом деле… ввиду моей особенности. те, кто знакомы со мной лично, могут знать: я очень плох в технических собесах
я могу что угодно написать: написать быстро, хорошо, качественно, практически на любом языке и независимо от фреймворка… я легко переключаюсь между языками и фреймворками, даже стеками… но на собесе… 😒😒😒 на собесе совсем не так
такая вот у меня особенность 🤷♂️ да, я хорош в практике и очень плох в теории. а готовиться-зубрить… ну честно говоря не хочется, да и смысла большого не вижу
вообще, собес был ну очень простой 🤦♂️
но вот эта моя особенность не позволила мне его пройти. но как сказал в начале – я особо и не возлагал на него надежд. позиция кстати была изначалльно на юнит-лида, но потом перешла на тимлида. так что да – это был собес по питону на тимлида
что ваще смешно: была задача, которую я сам делал 2 недели назад 😅 в своем рабочем коде. мне там понадобилось считать длительность отработки запроса, и я прикрутил декоратор, который это делает. ну прикрутил за 20 минут и забыл
да, так это работает у меня: я могу быстро найти решение, запилить его и дальше забыть. но при этом буду помнить, где, что, для чего и как в общих чертах я это делал
и тут они значит дают задачу: написать декоратор, который запускает функцию N раз и считает длительность ее выполнения. и я не смог его написать! 😩 я помнил, когда, где и для чего писал такой же декоратор, а вот вспомнить наизусть синтаксис я не смог 🤷♂️
короче, такие у меня дела…
это я все к чему… ну во-первых, поделиться с вами. во-вторых, вас ждут решения этих задач 😅
#python #собес
😱2😢2😭2😨1😎1
то самое слово – корутины 😱
читаю сейчас первоисточник про корутины в питоне – PEP 492 – Coroutines with async and await syntax (https://peps.python.org/pep-0492/)
позже приду к вам с мыслями и информацией по поводу асинхронщины нашей любимой 😆 … и такой полезной 🔥
#python #pep #coroutines #async
читаю сейчас первоисточник про корутины в питоне – PEP 492 – Coroutines with async and await syntax (https://peps.python.org/pep-0492/)
позже приду к вам с мыслями и информацией по поводу асинхронщины нашей любимой 😆 … и такой полезной 🔥
#python #pep #coroutines #async
🔥3🤓2👀2
Реальный Код
хотелось написать сюда, но не знал о чем… 🤔 … и накидал скрипт, который считает статистику использования мною команд в терминале что получилось – ниже 👇 выше ☝️ можно такое на собесах спрашивать, чтобы больше узнать о человеке: чем пользуется, какой стек…
сегодня начинаю серию постов про мои топ утилиты/программы, которые я чаще всего использую
и начинаем мы... па-бааааааа-мммм... ну конечно же с питона 😆
python – это программа-интерпретатор одноименного языка программирования. что значит интерпретатор? а это такая программа, которая читает исходный код программы на этом языке и исполняет каждую строку за строкой
пробежимся по основным возможностям...
вообще, вот следующие три варианта можно использовать во всех unix-подобных операционных системах и частично с некоторыми особенностями – в Windows
// показать справку по аргументам программы и краткую информацию по ее использованию (вместо питона может быть любая программа):
в среде Windows исторически было принято вызывать страницу с описанием параметров с помощью аргумента /h или /?, однако сейчас все больше программ, которые используют unix-like стиль. да и в целом, кросс-платформенные программы обычно используют тот же unix-like подход
// вывести версию программы:
// получить развернутую помощь по программе (unix-like системы: Linux, MacOS и прочие):
еще раз подчеркну, что три варианта использования выше применимы к абсолютному большинству программ и утилит. рекомендую первым делом всегда начинать знакомство с новой утилитой через эти параметры
итак, к питону...
// запустить скрипт на выполнение:
// запустить пакет на выполнение:
например, вывести список установленных пакетов:
тут мы говорим интерпретатору запустить пакет (`-m`) с именем pip и передать ему параметр list. в итоге будет распечатан список установленных пакетов
// выполнить кусок питоновского кода:
например, вот так мы можем сгенерировать пароль:
этот код выведет что-то вроде:
или в другой раз:
// запустить интерактивную среду Python (она ещеназывается REPL, Read-Eval-Print Loop), или, проще говоря, ИДЕ на самых минималках, а скорее даже питонячий плейграунд для проверки каких-то конструкций языка:
при этом у вас появится в начале строки такой знак:
который означает, что вы находитесь как раз в интерактивном интерпретаторе питона
в нем вы можете также писать исходный код, включая многостроковые конструкции. после вбивания питоновских конструкций и жамканья Enter вы будете тут же получать результат. рекомендую: зайдите-поиграйтесь, если еще не пробовали
для выхода используйте функцию exit()
вот например как может это выглядеть:
на этом на сегодня все. happy питонинга вам 😉
#python #repl #terminal
и начинаем мы... па-бааааааа-мммм... ну конечно же с питона 😆
python – это программа-интерпретатор одноименного языка программирования. что значит интерпретатор? а это такая программа, которая читает исходный код программы на этом языке и исполняет каждую строку за строкой
пробежимся по основным возможностям...
вообще, вот следующие три варианта можно использовать во всех unix-подобных операционных системах и частично с некоторыми особенностями – в Windows
// показать справку по аргументам программы и краткую информацию по ее использованию (вместо питона может быть любая программа):
python --help
в среде Windows исторически было принято вызывать страницу с описанием параметров с помощью аргумента /h или /?, однако сейчас все больше программ, которые используют unix-like стиль. да и в целом, кросс-платформенные программы обычно используют тот же unix-like подход
// вывести версию программы:
python --version
// получить развернутую помощь по программе (unix-like системы: Linux, MacOS и прочие):
man python
еще раз подчеркну, что три варианта использования выше применимы к абсолютному большинству программ и утилит. рекомендую первым делом всегда начинать знакомство с новой утилитой через эти параметры
итак, к питону...
// запустить скрипт на выполнение:
python my_script.py
// запустить пакет на выполнение:
python -m package
например, вывести список установленных пакетов:
python -m pip list
тут мы говорим интерпретатору запустить пакет (`-m`) с именем pip и передать ему параметр list. в итоге будет распечатан список установленных пакетов
// выполнить кусок питоновского кода:
python -c <код>
например, вот так мы можем сгенерировать пароль:
python -c "import random; print(''.join(random.choice(string.ascii_letters + string.digits) for _ in range(8)))"
этот код выведет что-то вроде:
2Lqszm8l
или в другой раз:
WTgs90No
// запустить интерактивную среду Python (она ещеназывается REPL, Read-Eval-Print Loop), или, проще говоря, ИДЕ на самых минималках, а скорее даже питонячий плейграунд для проверки каких-то конструкций языка:
python
при этом у вас появится в начале строки такой знак:
>>>
который означает, что вы находитесь как раз в интерактивном интерпретаторе питона
в нем вы можете также писать исходный код, включая многостроковые конструкции. после вбивания питоновских конструкций и жамканья Enter вы будете тут же получать результат. рекомендую: зайдите-поиграйтесь, если еще не пробовали
для выхода используйте функцию exit()
вот например как может это выглядеть:
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2024, 11, 16, 20, 9, 31, 518836)
>>> ll = [1, 2, 3, 4, 5]
>>> ll
[1, 2, 3, 4, 5]
>>> '-'.join(ll)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected str instance, int found
>>> ', '.join(ll)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected str instance, int found
>>> ll = ['a', 'b', 'c']
>>> '-'.join(ll)
'a-b-c'
>>> exit()
на этом на сегодня все. happy питонинга вам 😉
#python #repl #terminal
🔥3👍2❤1
о полезности чтения чужих исходников
я кажется уже упомниал, что крайне полезно читать чужой код. благо, егокак говна за баней очень много на ГитХабе: по любой тематике, любого качества, на любом языке
через это ты не только учишься быстро понимать и вникать в код (а это тоже навык), но самое главное – можешь учиться новому (к вопросу про мой предыдущий пост, кстати☝️), перенимать какие-то фишки, приемчики или даже узнавать новые конструкции языка или используемые бибилиотеки. ну а где-то, наоборот, можешь понять, почему ты бы написал лучше и чем данный код плох, какие есть минусы и почему его сложно читать (=поддерживать)
это, кстати, касается и код-ревью: важно читать и перенимать чужой опыт и фишечки написания кода
так вот… читаю я сегодня на досуге код OpenShot (это такой видеоредактор). а что примечательно – его ГУЕвая часть написана на связке Python+Qt
читаю-читаю, и натыкаюсь в разделе инициализации логов на такую конструкцию:
и узнаю, что в питоне, оказывается, из коробки есть log rotation (об этом в другой раз; вкратце, это когда лог пишется до определенного момента в файл, после чего начинает писаться в следующий файл, чтобы файлы не разрастались)
поглядел в доке: так там целая поляна всевозможных лог хендлеров, от null до отправления UDP-датаграмм
так что в очередной раз даю совет: читайте чужой код!
#python #log #sourceCode #опыт
я кажется уже упомниал, что крайне полезно читать чужой код. благо, его
через это ты не только учишься быстро понимать и вникать в код (а это тоже навык), но самое главное – можешь учиться новому (к вопросу про мой предыдущий пост, кстати☝️), перенимать какие-то фишки, приемчики или даже узнавать новые конструкции языка или используемые бибилиотеки. ну а где-то, наоборот, можешь понять, почему ты бы написал лучше и чем данный код плох, какие есть минусы и почему его сложно читать (=поддерживать)
это, кстати, касается и код-ревью: важно читать и перенимать чужой опыт и фишечки написания кода
так вот… читаю я сегодня на досуге код OpenShot (это такой видеоредактор). а что примечательно – его ГУЕвая часть написана на связке Python+Qt
читаю-читаю, и натыкаюсь в разделе инициализации логов на такую конструкцию:
#
# Create rotating file handler
#
if os.path.exists(info.USER_PATH):
fh = logging.handlers.RotatingFileHandler(
os.path.join(info.USER_PATH, 'openshot-qt.log'),
encoding="utf-8",
maxBytes=25*1024*1024, backupCount=3)
fh.setLevel(info.LOG_LEVEL_FILE)
fh.setFormatter(file_formatter)
log.addHandler(fh)
else:
class DummyHandler:
def setLevel(self, level):
return True
fh = DummyHandler()
и узнаю, что в питоне, оказывается, из коробки есть log rotation (об этом в другой раз; вкратце, это когда лог пишется до определенного момента в файл, после чего начинает писаться в следующий файл, чтобы файлы не разрастались)
поглядел в доке: так там целая поляна всевозможных лог хендлеров, от null до отправления UDP-датаграмм
так что в очередной раз даю совет: читайте чужой код!
#python #log #sourceCode #опыт
🔥2👍1👌1
в Питоне для генерации чего-то более-менее критичного к секьюрности рекомендуется использовать пакет
вот дока https://docs.python.org/3/library/secrets.html
а вот PEP 506 с деталями https://peps.python.org/pep-0506/
the rule of thumb:
почитайте – крайне полезные вещи там
#security #python
secrets
вместо random
вот дока https://docs.python.org/3/library/secrets.html
а вот PEP 506 с деталями https://peps.python.org/pep-0506/
the rule of thumb:
random
используем для всякого матмоделирования и некриитчного к безопасности. secrets
– для генерации токенов, паролей и всего прочего на проде, что нужно хранить безопасно. Кстати, там же есть удобная функция для генерации валидных рандомных частей УРЛов – secrets.token_urlsafe()
почитайте – крайне полезные вещи там
#security #python
👍1🔥1
да уж… питона у меня на ГХ все больше и больше
второй график – на начало этого года
третий – на начало 2024
четвертый – два года назад
кстати, также видно и развитие утилиты git-stats-plate-gen за те же два года
итого, что у нас по питону:
авг 2023 – 25К
янв 2024 – 33К
янв 2025 – 58К
авг 2025 – 77К
🤪
это только полностью мои репы, которые мейнтейню в одно лицо. Никаких форков или те, куда я контрибутил «вовне»
#python #stats #gitHub
второй график – на начало этого года
третий – на начало 2024
четвертый – два года назад
кстати, также видно и развитие утилиты git-stats-plate-gen за те же два года
итого, что у нас по питону:
авг 2023 – 25К
янв 2024 – 33К
янв 2025 – 58К
авг 2025 – 77К
🤪
это только полностью мои репы, которые мейнтейню в одно лицо. Никаких форков или те, куда я контрибутил «вовне»
#python #stats #gitHub
🔥1