ch
Feedback

不要被骗子欺骗!Telemetrio 会找到并标记这些频道 👉 如果想查看标记,请订阅

Python Lounge: работа и стажировки для программистов

Python Lounge: работа и стажировки для программистов

前往频道在 Telegram

Здесь можно найти интересующую вас работу и стажировки для программистов, а так же полезные статьи про Python. Размещение вакансии только - @perezvonyubot Ссылка на канал: @python_lounge Мы входим в сеть promopoisk.com Реклама: @adtgassetsbot

显示更多
3 704
订阅者
无数据24 小时
-127 天
-1530 天
帖子存档
В первой части мы научились писать Hello world. Сегодня мы рассмотрим более сложную вещь - обработку данных форм. Создадим в нашей папке файл index.html со следующим содержимым: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Обработка данных форм</title> </head> <body> <form action="/cgi-bin/form.py"> <input type="text" name="TEXT_1"> <input type="text" name="TEXT_2"> <input type="submit"> </form> </body> </html> А в папке cgi-bin/ - файл form.py (обработчик формы) #!/usr/bin/env python3 import cgi form = cgi.FieldStorage() text1 = form.getfirst("TEXT_1", "не задано") text2 = form.getfirst("TEXT_2", "не задано") print("Content-type: text/html\n") print("""<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Обработка данных форм</title> </head> <body>""") print("<h1>Обработка данных форм!</h1>") print("<p>TEXT_1: {}</p>".format(text1)) print("<p>TEXT_2: {}</p>".format(text2)) print("""</body> </html>""") Попробуем это в действии. Запускаем локальный сервер, и переходим на localhost:8000: Готово, теперь мы научились обрабатывать данные из форм. Завтра научимся работать с Cookies.

Доброе утро, питонисты 🙃 Сегодняшний день я планирую начать с полезных советов для программиста, которые я и сам использую. Настройте ваши подписки Обычный человек потребляет в почте, соцсетях, Telegram множество контента. Не тратьте время на ерунду и бесцельный сёрфинг! Выпилите из ленты котиков и прочую милоту, оставьте только полезное. Так, обыденно просматривая новости в различных каналах, вы сможете попутно учиться. Кейсы, новости отрасли, советы разработчиков чаще будут у вас перед глазами. Используйте для обучения сервисы Кому-то нравится читать, а кому-то — смотреть видео. Есть сервисы с игровыми механиками. На мой взгляд, лучше всего для тренировки навыков программирования подходит CodeFights: если я вижу, что кто-то сделал код быстрее или интереснее, у меня азарт просыпается. Ещё есть сервис CodeCombat, мобильные приложения: Code School, CodeHS, Free Code Camp и так далее. P.S не расслабляйтесь, сегодня вас ждёт 2 часть создании сайтов, а именно - обработка форм.

Пишем простой сайт на Python. Часть 1/3 Сегодня разберём создание страницы при помощи CGI-скриптов. Настройка локального сервера. В Python уже встроен CGI сервер, поэтому его настройка не составит труда. from http.server import HTTPServer, CGIHTTPRequestHandler server_address = ("", 8000) httpd = HTTPServer(server_address, CGIHTTPRequestHandler) httpd.serve_forever() Теперь откройте браузер и в адресной строке наберите localhost:8000 Теперь в той папке, где мы запустили сервер, создаём папку cgi-bin (у меня она уже создана). В этой папке создаём скрипт hello.py со следующим содержимым: #!/usr/bin/env python3 print("Content-type: text/html") print() print("<h1>Hello world!</h1>") Первая строка говорит о том, что это Python скрипт (CGI-скрипты можно не только на Python писать). Вторая строка пишет заголовок. Он обозначает, что это будет html файл (бывает ещё css, javascript, pdf и куча других, и браузер различает их по заголовкам). Третья строка отделяет заголовки от тела ответа. Четвёртая печатает Hello world. Теперь переходим на localhost:8000/cgi-bin/hello.py И радуемся! В следующей части будет обработка форм и cookies.

Закрытый чат канала Python Lounge (ограничение участия (бесплатно, но нужно пройти отбор), но зато только отборный контент и самые крутые кодеры)
Anonymous voting

Тут появились на рынке ребята, которые меняют индустрию обучения программированию и математики в России Если вы преподавтаель по математике или программированию - напишите @PolinaDS Если вы хотите работать в компании (сейчас набирают штат разработчиков - работа удаленно по всему миру) - напишите @Lyubov_Kokhanchuk За трудоустройство от вас обещают видеоуроки по одному из курсов или модное Худи с большим капюшоном от Progy https://progyschool.ru/skidkinewyear2020 И отличная новость! Готовим посты и начинаем вас радовать контентом уже с 10 января - осталось подождать немного. Зато будет много контента, много на английском, видео. Ну и мы запускаем закрытый чат, как туда попасть расскажем в ближайшие дни!

Есть заказ. Сейчас поймем насколько интересно 1-2 раза в неделю делать подборки заказов и постить их, например в четверг или пятницу
Anonymous voting

Разница между генераторными выражениями и генераторами коллекций Сначала предлагаю сравнить следующие две строчки кода: a = [i for i in range(5)] x = (i for i in range(5)) Единственная разница в этих двух записях – скобки; в первой строчки они квадратные, а во второй – круглые. Сообщу заранее, что значением переменной a является список, а переменная x хранит в себе генератор. Можем в этом убедиться, распечатав обе переменные: print(a) print(x) # [0, 1, 2, 3, 4] # <generator object <genexpr> at 0x1079d4050> В первом варианте всё должно быть более менее понятно, а если нет, то рекомендую прочитать пост про генераторы коллекций. Переменная x, как уже выяснилось, хранит в себе по сути самый обычный генератор. Про генераторы на канале также был отдельный пост. Можем получить его значения с помощью цикла: for i in x: print(i, end=' ') # 0 1 2 3 4 Но вот возникает вопрос, а что использовать то? Здесь всё тоже достаточно просто. Если вам нужен результат в виде списка прямо сейчас для дальнейшего выполнения программы, то используйте генераторные выражения. А если же значения понадобятся еще не скоро или вообще неизвестно, понадобится ли они вообще, то предпочтительнее генераторы, чтобы не занимать лишнюю память и не нагружать систему.

3 способа добавить элемент в список Напоминаю, списки в Python – упорядоченные последовательности элементов различных типов данных. Списки можно изменять, например добавлять новые элементы. 1. list.append(x) – добавляет элемент, переданный в качестве аргумента, в конец списка. Этот метод является самым простым и распространённым в коде. arr = [1, 2] arr.append(3) # [1, 2, 3] 2. list.insert(i, x) – вставляет элемент в переданную позицию. Первый аргумент означает индекс элемента, перед которым будет добавлено новое значения. Таким образом, list.insert(0, x) вставит элемент в начало списка, а list.insert(len(list), x) эквивалентно записи list.append(x). arr = [1, 2] arr.insert(1, 3) # [1, 3, 2] 3. list.extend(iterable) – расширяет список, добавляя все элементы другой коллекции. arr = [1, 2] arr2 = [3, 4] arr.extend(arr2) # [1, 2, 3, 4] Тема должна быть достаточно легкая и знакомая многим, но повторенье – мать ученья. P. S. Кстати, оцените новый логотип ;)

Логические any и all Одна из многих причин, почему Python является таким популярным языком, заключается в том, что он читаем и выразителен. Предлагаю взглянуть на следующий код: statements = [True, True, False] if any(statements): print('Как минимум одно выражение истинно') if all(statements): print('Все выражения истинны') if any(statements) and not all(statements): print('Как минимум одно выражение истинно и одно не истинно') Функция any возвращает значение True, если хотя бы одно из переданных утверждений верно, all – когда все верны. На мой взгляд, эти две функции заслуживают отдельного внимания всего лишь из-за их простоты в использовании.

Перестановки (Permutations) itertools.permutations генерирует перестановки, возвращая итерируемый объект. Полагаю, не надо объяснять, как с их помощью вы можете сбрутить чей-то пароль? >>> import itertools >>> for p in itertools.permutations('ABCD'): ... print(p) ('A', 'B', 'C', 'D') ('A', 'B', 'D', 'C') ('A', 'C', 'B', 'D') ('A', 'C', 'D', 'B') ('A', 'D', 'B', 'C') ('A', 'D', 'C', 'B') ('B', 'A', 'C', 'D') ('B', 'A', 'D', 'C') ('B', 'C', 'A', 'D') ('B', 'C', 'D', 'A') ('B', 'D', 'A', 'C') ('B', 'D', 'C', 'A') ('C', 'A', 'B', 'D') ('C', 'A', 'D', 'B') ('C', 'B', 'A', 'D') ('C', 'B', 'D', 'A') ('C', 'D', 'A', 'B') ('C', 'D', 'B', 'A') ('D', 'A', 'B', 'C') ('D', 'A', 'C', 'B') ('D', 'B', 'A', 'C') ('D', 'B', 'C', 'A') ('D', 'C', 'A', 'B') ('D', 'C', 'B', ‘A’) 4! = 24

Почему именно Python? В современном обществе программировать на хотя бы базовом уровне должен уже каждому. Однако практически каждый новичок теряется при выборе языка программирования, когда сталкивается с таким разнообразием. В статье мы постарались объяснить наш выбор. Читать 5 минут

Моржовый оператор – примеры В предыдущем посте мы обсудили синтаксис нового оператора присваивания. В личные сообщения я получил большое количество просьб продолжить, поэтому в этом посте мы рассмотрим частные случаи, когда морж в коде выглядит солидно. Но для начала стоит отметить ещё один важный момент – моржовый оператор не создаёт новую область видимости: if (n:= len(a)) > 10: print(f'Слишком много элементов') print(f'Количество элементов: {n}') Теперь к практичным примерам использования. 1. Повторно используем значение в списке: foo = [y:= f(x), y * 2, y * 3] # вместо foo = [f(x), f(x) * 2, f(x) * 3] 2. Повторное использование значения из условия в генераторных выражениях: [y for x in data if (y:=f(x))] # вместо result = [] for x in data: result = f(x) if result: results.append(result) 3. Чтение данных из файла внутри циклов while: while (block := f.read(256)) != '': process(block) # вместо while True: stuff() if fail_condition: break

Моржовый оператор (Walrus Operator) в Python 3.8 Новый способ присваивания выражения (:=), или оператор «морж», был самой обсуждаемой функцией, представленной в последней версии Python. Новое дополнение к языку было предложено в PEP 572. Сразу посмотрим, как это выглядит в коде: (x:= 5) print(x) # 5 Присваивания с помощью моржа требуется делать в круглых скобках, и перед знаком равно пишется двоеточие. Внутри скобок либо создается новая переменная, либо происходит присвоение значения уже существующий переменной. Но фишка заключается в том, что вся эта конструкция, скажем так, возвращает присвоенное значение, как это делают обычные функции. a = (b:= 7) print(a, b) # 7 7 Пойдем дальше и рассмотрим пример, в котором раскрывается весь потенциал моржового оператора: # пусть a – контейнер или последовательность if (n:= len(a)) > 10: print(f'Слишком много элементов, а именно {n}') То есть мы только что прямо в проверке условия объявили новую переменную n и далее использовали ее вместо того, чтобы вычислять значение заново. Для сравнения посмотрим, как мы это могли сделать раньше: n = len(a) if n > 10: print(f'Слишком много элементов, а именно {n}') # или if len(a) > 10: print(f'Слишком много элементов, а именно {len(a)}') В первом случае появляется лишняя строка кода, в которой объявляется ненужная переменная. Во втором случае дважды вызвана одна и та же функция, а это потеря в производительности. Если вам понравился моржовый оператор, то дайте мне фидбек – я сделаю отдельный пост с конкретными примерами.

Буквально недавно вышел Python 3.8, делать обзор его новых фишек на канал?
Anonymous voting

​​Новая рубрика #кодподписчика На днях одна подписчица присала мне свой интересный и крайне необычный скрипт, поэтому я решил создать новую рубрику на своём канале, в которой буду выкладывать интересные работы своих подписчиков. В общем, суть программы в том, что берется произвольная картинка, разбивается на кусочки, создаются папки на рабочем столе и эти кусочки первоначальной картинки ставятся как иконки на папки. То есть получается некая мозаика, которую можно собрать в единую картинку прямо на рабочем столе вашего компьютера. По-моему, это отличный и вполне необычный способ отвлечься от работы, особо ничего не открывая. Теперь по технической части: скрипт написан на Python с использованием модулей win32api и pillow. Весь исходный код доступен здесь на гитхабе, советую посмотреть. Также подписчица просила в раздел Issues написать ваши идеи насчет того, что можно добавить и улучшить. Да, теперь каждый может прислать своё любое нетривиальное творение мне в личные сообщения, и я с большой вероятностью опубликую.

Дробные числа в Python могут иметь значение NaN, которое ничему не равно, включая самого себя. Один из способов получить их – использовать модуль math. >>> math.nan == math.nan False Кроме того, объект NaN не является уникальным в отличие от None, вы можете иметь несколько различных объектов NaN из разных источников: >>> float('nan') nan >>> float('nan') is float('nan') False Также это означает, что нельзя использовать NaN в качестве ключа в словаре: >>> d = dict() >>> d[float('nan')] = 1 >>> d {nan: 1} >>> d[float('nan')] Traceback (most recent call last):  File "<stdin>", line 1, in <module> KeyError: nan

uuid Стандартный модуль uuid — быстрый и простой способ сгенерировать UUID (universally unique identifier, глобально уникальный идентификатор). from uuid import uuid4 user_id = uuid4() print(user_id) Так мы создаём случайное 128-битное число, которое наверняка будет уникальным. Существует более 2¹²² возможных UUID. Это более 5 ундециллионов, то есть 36 нулей. Вероятность нахождения дубликатов в заданном наборе крайне мала. Даже при наличии триллиона UUID вероятность того, что среди них есть дубликат, гораздо меньше, чем один к миллиарду. Вполне недурно для двух строк кода.

В общем, мы создали объединенный чат нескольких каналов для взаимопомощи в программировании и просто общения – @python_chat_ru

Метод get для словарей У словарей есть метод get, который возвращает значение по ключу, переданному в аргументах функции. Однако если такого ключа в словаре нет, то исключение не выбрасывается, а возвращается значение по умолчанию, которое передаётся вторым аргументом, или же None, если второй аргумент не передан. В качестве примера создадим словарь с именами, которые можно получить по определенным значениям, и напишем функцию, которая возвращает приветственную фразу со взятием имени из этого словаря: names = { 382: 'Alice', 590: 'Bob', 951: 'Dilbert' } def greeting(user_id): name = names.get(user_id, 'there')    return f'Hi {name}!' Смотрим на результат: greeting(382) # 'Hi Alice!' Вызов функции с аргументом в виде несуществующего в словаре ключа: greeting(0) # 'Hi there!'

Python имеет ужасную репутацию, когда речь идет о возможности параллельных вычислений. Не обращая внимания на типичные рассуждения о его потоках и GIL (который обычно нормально работает), реальная проблема многопоточности Python не техническая, а педагогическая. Распространенные руководства о библиотеках threading и multiprocessing в целом неплохие, но тяжеловаты для понимания. Именно по этой причине я написал статью в которой рассматриваются возможности multiprocessing, доступные каждому. Читать статью