Получи случайную криптовалюту за регистрацию!

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

Логотип телеграм канала @python_lounge — Python Lounge: работа и стажировки для программистов P
Логотип телеграм канала @python_lounge — Python Lounge: работа и стажировки для программистов
Адрес канала: @python_lounge
Категории: Технологии
Язык: Русский
Количество подписчиков: 5.07K
Описание канала:

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

Рейтинги и Отзывы

3.67

3 отзыва

Оценить канал python_lounge и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

1

4 звезд

1

3 звезд

0

2 звезд

1

1 звезд

0


Последние сообщения 105

2021-01-25 15:12:10 Как писать хороший код на python?

Умение правильно и хорошо писать код — это важный навык для python-разработчика. Как научится писать хороший код — вы узнаете из сегодняшней статьи. Говоря о „хорошем коде“ имеется в виду большое количество факторов с которыми вам предстоит познакомиться, чтобы писать правильный и "конвейерный" код.

Возможно, самый известный сборник этих факторов Python был написан Тимом Питерсом, давний участник языка и его группы новостей
comp.lang.python.
Этот сборник также известен под названием «The Zen of Python» и в нём изложены следующие факторы „хорошего кода“.

The Zen of Python, by Tim Peters
· Beautiful is better than uglyКрасивое — лучше, чем уродливое
·
Explicit is better than implicitЯвное лучше, чем неявное.
·
Simple is better than complexПростое лучше, чем сложное.
·
Complex is better than complicated - Сложное лучше, чем запутанное.
· Flat is better than nested - Плоский лучше, чем вложенный.
· Sparse is better than dense - Редкое лучше, чем частое.
· Readability counts - Читаемость имеет значение.
· Special cases aren't special enough to break the rules - Особых случаев недостаточно, чтобы нарушать правила.
· Although practicality beats purity - Хотя практичность лучше чистоты.
· Errors should never pass silently - Ошибки никогда не должны замалчиваться.
· Unless explicitly silencedЕсли только они не замалчиваются явно.
· In the face of ambiguity, refuse the temptation to guessПеред лицом двусмысленности откажитесь от соблазна угадать.
· There should be one -- and preferably only one -- obvious way to do it.Должен быть один - и желательно только один - очевидный способ сделать это.
· Although that way may not be obvious at first unless you're DutchХотя поначалу этот способ может быть не очевиден, если вы не голландец.
· Now is better than neverЛучше сейчас, чем никогда.
· Although never is often better than *right* nowХотя никогда не бывает лучше, чем прямо сейчас.
· If the implementation is hard to explain, it's a bad ideaЕсли реализацию сложно объяснить, это плохая идея.
· If the implementation is easy to explain, it may be a good idea Если реализацию легко объяснить, это может быть хорошей идеей.
· Namespaces are one honking great idea -- let's do more of those! Пространства имен - одна отличная идея - давайте сделаем их больше!
Эти факторы можно быстро заполучить просто написав в интерпретаторе
import this
После чего вы получите данный список.
***
Без пониманий этих факторов ваш код будет непригодным для больших, и без того сложных проектов.
***
3.2K viewsedited  12:12
Открыть/Комментировать
2021-01-25 10:30:27 Друзья, вы просили иногда делиться лучшими вакансиями в ИТ.
Вот и она!

Джедай PHP на Laravel (Игровой сектор)

Требования:
- Рассмотрим спеца с коммерческим опытом и хорошим кодом /строгое и полное соблюдение PSR стандартов, углубленные знания SQL
- Умение анализировать и оптимизировать запросы, проектировать структуры таблиц с максимальной производительности
- Написание автоматических тестов
- Понимание REST API и протокола HTTP
- Опыт работы с Git, Composer
- Опыт работы с Jira/Gitlab

Условия:
- Работаем удаленно
- З/П 150 000 - 180 000 рублей

Контакты: @Olga_EORA
1.9K views07:30
Открыть/Комментировать
2021-01-21 10:46:05 ​​ Основные элементы графика в библиотеке Matplotlib.
Сегодня рассмотрим основные термины и понятия, касающиеся изображения
графика, с которыми вам необходимо будет познакомиться.

Далее мы будем использовать термин "график" для обозначения всего
изображения, которое формирует Matplotlib (см. рисунок под статьей), и линии,
построенной по заданному набору данных.

Корневым элементом, на котором Matplotlib строит изображение,
является фигура (Figure). Всё, что перечислено на рисунке — это
элементы фигуры. Рассмотрим её составляющие более подробно.

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

Оси
Вторым по важности элементом фигуры являются оси. Для каждой оси
можно задать метку (подпись), основные (major) и дополнительные
(minor) тики, их подписи, размер, толщину и диапазоны.

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

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

import matplotlib.pyplot as plt
from matplotlib.ticker import (MultipleLocator, FormatStrFormatter,
AutoMinorLocator)
import numpy as np
x = np.linspace(0, 10, 10)
y1 = 4*x
y2 = [i**2 for i in x]
fig, ax = plt.subplots(figsize=(8, 6))
ax.set_title('Графики зависимостей: y1=4*x, y2=x^2', fontsize=16)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y1, y2', fontsize=14)
ax.grid(which='major', linewidth=1.2)
ax.grid(which='minor', linestyle='--', color='gray', linewidth=0.5)
ax.scatter(x, y1, c='red', label='y1 = 4*x')
ax.plot(x, y2, label='y2 = x^2')
ax.legend()
ax.xaxis.set_minor_locator(AutoMinorLocator())
ax.yaxis.set_minor_locator(AutoMinorLocator())
ax.tick_params(which='major', length=10, width=2)
ax.tick_params(which='minor', length=5, width=1)
plt.show()
2.1K viewsedited  07:46
Открыть/Комментировать
2020-12-22 15:31:02 ​​​​ Библиотека Matplotlib

Библиотека Matplotlib является одним из самых популярных средств
визуализации данных на Python. Она отлично подходит как для создания
статичных изображений,так и анимированных, и интерактивных
решений.

Matplotlib является частью Scientific Python — набора библиотек для
научных вычислений и визуализации данных, куда также входят NumPy 1 ,
SciPy 2 , Pandas 3 , SymPy 4 и ещё ряд других инструментов.

При описании параметров функций будет использоваться следующий
формат:
• имя_аргумента: тип(ы)
◦ описание

Если в описании типа данных есть слово optional, это значит, что
данный параметр имеет значение по умолчанию, и его не обязательно
явно указывать.

Установка:

Установка Matplotlib с помощью менеджера pip
Для установки Matplotlib с помощью менеджера пакетов pip введите в
командной строке вашей операционной системы следующие команды:
python -m pip install -U pip
python -m pip install -U matplotlib
Первая из них обновит ваш pip, вторая установит Matplotlib со всеми
необходимыми зависимостями.

Проверим версию библиотеки, она, скорее всего, будет отличаться от
приведённой ниже:
>>> matplotlib.__version__
'3.0.3'



Полезные ссылки:
https://numpy.org/
https://scipy.org/
https://pandas.pydata.org/
https://www.sympy.org/en/index.html
3.7K views12:31
Открыть/Комментировать
2020-12-17 16:30:24 ​​ ГЕТТЕРЫ И СЕТТЕРЫ В python
(Инкапсуляция)
В ЯП python по умолчанию все атрибуты в классах являются общедоступными(public), это значит , что из любого места программы мы можем получить аттрибут объекта и изменть его.
Пример:
class Human:
def __init__(self, name, age): #коструктор класса Human
self.name = name #устанавливаем имя
self.age = age #устанавливаем возраст
def display_info(self):
print ("Имя : ", self.name, "\tВозраст:", self.age)
Me = Human ("python_lounge", 2)
Me.name = "Captain-America!" # изменяем атрибут name
Me.age = 132 # изменяем атрибут age
Me.display_info()
Результат:
Output : "Имя: Человек-паук    Возраст: -129"
В примере выше мы показали что без икапсуляции можно нежелательным образом изменять аттрибуты класса.
Не зря инкапсуляция является несущим звеном в мире ООП.

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

class Human:
   def __init__(self, name, age): #коструктор класса Human
    self.__name = name #устанавливаем имя
    self.__age = age #устанавливаем возраст

   def set_age(self, age):
    if (age in range(1,100)):
       self.__age = age #
    else :
       print ("Недопустимый возраст")

   def set_name (self, name):
      self.__name = name if name else print ("Недопустимое имя")

   def display_info(self):
      print ("Имя : ", self.__name, "\tВозраст:", self.__age)

   def get_age(self):
      return self.__age

   def get_name(self):
      return self.__name

Me = Human ("python_lounge", 2)
Me.display_info() #Имя:python_lounge Возраст: 2
Me.set_name ("Captain-America!") #изменяем атрибут name
Me.set_age(26) # изменяем атрибут age
Me.display_info() #Имя:Captain-America! Возраст: 26


Для создания приватного атрибута в начале его наименования ставится двойной прочерк: self.__name. К такому атрибуту мы сможем обратиться только из того же класса. Но не сможем обратиться вне этого класса. Например, присвоение значения этому атрибуту ничего не даст:
Me.__age = 43

Аннотации свойств
Выше мы рассмотрели, как создавать свойства. Но Python имеет также еще один - более элегантный способ определения свойств. Этот способ предполагает использование аннотаций, которые предваряются символом @.
Для создания свойства-геттера над свойством ставится аннотация @property.
Для создания свойства-сеттера над свойством устанавливается аннотация имя_свойства_геттера.setter.
3.0K viewsedited  13:30
Открыть/Комментировать
2020-12-16 19:09:10 ​​ ДИНАМИЧЕСКИЕ АТТРИБУТЫ ДЛЯ ОБЪЕКТОВ

Есть возможность контролировать способы получения аттрибутов из объекта , с помощью магического метода __getattr__.

Когда мы вызваем что-то вроде .,Python будет искать в библиотеке объекта, вызвав __getattribute__
в нём.
Если ничего не найдено , то объект не имеет аттрибут с именем которую мы ищем, тогда extra метод __getattr__ вызывается , получая имя аттрибута (myattribute) как параметр.
Получая это значение мы можем котролировать значения которые будут возвращены к нашим объектам.
Мы даже можем создать новый аттрибут и вернуть объекту "ненайденный аттрибут".

Ниже показано определение метода __getattr__ .

class DynamicAttributes:
def __init__(self, attribute):
self.attribute = attribute
def __getattr__(self, attr):
if attr.startswith("fallback_"):
name = attr.replace("fallback_", "")
return f"[fallback resolved] {name}"
raise AttributeError(f"{self.__class__.__name__} has no attribute {attr}")

Примечание:
Будьте осторожны при реализации такого динамического метода, как __getattr__,
и используйте его с осторожностью. При реализации __getattr__,
поднять AttributeError.
2.2K views16:09
Открыть/Комментировать
2020-12-16 15:00:05 ​​ Функция sum() в python3
Как бы вы решили задачу получения суммы элементов
списка без обхода элементов в цикле?

Это можно сделать с помощью стандартной функции sum():

Cинтакс функции sum().
sum(iterable, start)

Параметры sum():
iterable - итерируемые типы (list , dict , tuple, и.т.д.)
start - (необезательно) - значение этого параметра прибавляется к уже готовой сумме элементов iterable.По умолчанию значение этого парметра 0.

Возвращаемое значение из sum():
sum() возвращает сумму start и элементов iterable.

Пример:
numbers = [1,5,5]
#парметр start передается со значением по умолчанию(0).
numbers_sum = sum (numbers);
print (numbers_sum)
# парметр start передается со значением 7.
numbers_sum = sum (numbers, 7)
print (numbers_sum)

Результат:
11
18

Примечания:

Если вам нужно использовать sum() с floating-point элементами iterable с правильной точностью после запятой , до использования
sum(iterable , start) , нужно вместе c import math добавить следующую строку. math.fsum(iterable).

Если вам нужно соединить(concatenate) элементы iterable (элементы должны быть string), тогда вы можете использовать метод join()

Пример:
myTuple = ("Python", "Lounge", "is", "the","best")
x = " ".join(myTuple)
print (x)

Результат:
Python Lounge is the best
2.1K views12:00
Открыть/Комментировать