Реализация класса контекстного менеджера
Начнем с того, что в контекстном менеджере должны быть определены методы enter и exit. Давайте создадим наш собственный менеджер контекста для открытия файлов и поймем суть его работы.
Просто определив методы enter и exit, мы можем использовать наш новый класс с оператором
Наш метод exit принимает три аргумента. Они требуются для каждого метода exit, который является частью класса.
# test
Начнем с того, что в контекстном менеджере должны быть определены методы enter и exit. Давайте создадим наш собственный менеджер контекста для открытия файлов и поймем суть его работы.
class NewOpen(object):
def __init__(self, file_name, mode):
self.file = open(file_name, mode)
def __enter__(self):
return self.file
def __exit__(self, type, value, traceback):
self.file.close()
Просто определив методы enter и exit, мы можем использовать наш новый класс с оператором
with
. Давайте попробуем:with NewOpen('test.txt', 'w') as file:
file.write('Hello, world!')
Наш метод exit принимает три аргумента. Они требуются для каждого метода exit, который является частью класса.
# test
Где будет быстрее поиск? При условии 1 млн записей.
Anonymous Poll
34%
dict
32%
set
15%
list
20%
tuple
Иногда приходится писать код с несколькими контекстными менеджерами, что выглядит не особо лаконично:
Начиная с Python 2.7 и 3.1, вы можете использовать всего один with:
До этого вы могли бы использовать функцию nested из contextlib:
with open('f') as f:
with open('g') as g:
with open('h') as h:
pass
Начиная с Python 2.7 и 3.1, вы можете использовать всего один with:
o = open
with o('f') as f, o('g') as g, o('h') as h:
pass
До этого вы могли бы использовать функцию nested из contextlib:
from contextlib import nested
with nested(o('f'), o('g'), o('h')) as (f, g, h):
pass
SberCloud запустили довольно забавную небольшую ролевую игру, позволяющую почувствовать себя в шкуре начинающего стартапера и потренироваться в запуске и поддержке первого проекта.
В стол или в релиз? Проверь, какой из тебя стартапер: https://sc.link/zX7
В стол или в релиз? Проверь, какой из тебя стартапер: https://sc.link/zX7
В Python имя переменной может состоять из одного подчеркивания: _. Хотя обычно такие имена не достаточно описательны и не должны использоваться, есть по крайней мере три случая, когда _ имеет общепринятый смысл.
Во-первых, интерактивные интерпретаторы Python используют _ для хранения результата последнего выполненного выражения:
В-третьих, _ используется, когда вам нужно придумать имена для значений, которые вам не нужны:
Во-первых, интерактивные интерпретаторы Python используют _ для хранения результата последнего выполненного выражения:
>>> 2 + 2Во-вторых, руководство модуля gettext рекомендует псевдоним его функции gettext() для _(), чтобы минимизировать загромождение вашего кода.
4
>>> _
4
В-третьих, _ используется, когда вам нужно придумать имена для значений, которые вам не нужны:
for _ in range(10):
print('Hello!')
"Быстрый" контейнер deque
Deque может быть реализован на Python с помощью модуля collections. Deque предпочтительнее, чем обычный список, в тех случаях, когда нам нужны более быстрые операции добавления и вытягивания элементо из обоих концов контейнера, поскольку deque обеспечивает линейную сложность O(1) для операций добавления и выталкивания по сравнению со списком, у которого сложность по времени для тех операций составляет O(n). Вот пример основных методов:
Также для deque есть возможность использовать стандартные функции по типу sum, min, max и тому подобные.
Deque может быть реализован на Python с помощью модуля collections. Deque предпочтительнее, чем обычный список, в тех случаях, когда нам нужны более быстрые операции добавления и вытягивания элементо из обоих концов контейнера, поскольку deque обеспечивает линейную сложность O(1) для операций добавления и выталкивания по сравнению со списком, у которого сложность по времени для тех операций составляет O(n). Вот пример основных методов:
>>> from collections import deque
>>> x = deque([1, 2, 3])
>>> x.append(4)
>>> x.appendleft(0)
>>> x
deque([0, 1, 2, 3, 4])
>>> x.pop()
4
>>> x.popleft()
0
>>> x
deque([1, 2, 3])
Также для deque есть возможность использовать стандартные функции по типу sum, min, max и тому подобные.
Создаем свой простенький локер - вирус, блокирующий компьютер; а также используем новый интересный модуль
Tkinter: часть 5
Tkinter: часть 5
Teletype
Tkinter: часть 5
Создаем свой простенький локер - вирус, блокирующий компьютер.
📌Функция sum() в python3
Как бы вы решили задачу получения суммы элементов
списка без обхода элементов в цикле?
Это можно сделать с помощью стандартной функции sum():
Cинтакс функции sum().
Параметры sum():
iterable - итерируемые типы (list , dict , tuple, и.т.д.)
start - (необезательно) - значение этого параметра прибавляется к уже готовой сумме элементов iterable.По умолчанию значение этого парметра 0.
Возвращаемое значение из sum():
sum() возвращает сумму start и элементов iterable.
Пример:
✅Результат:
🔴Примечания:
Если вам нужно использовать sum() с floating-point элементами iterable с правильной точностью после запятой , до использования
Если вам нужно соединить(concatenate) элементы iterable (элементы должны быть string), тогда вы можете использовать метод join()
Пример:
✅Результат:
Как бы вы решили задачу получения суммы элементов
списка без обхода элементов в цикле?
Это можно сделать с помощью стандартной функции 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
📌ДИНАМИЧЕСКИЕ АТТРИБУТЫ ДЛЯ ОБЪЕКТОВ
Есть возможность контролировать способы получения аттрибутов из объекта , с помощью магического метода
Когда мы вызваем что-то вроде
в нём.
Если ничего не найдено , то объект не имеет аттрибут с именем которую мы ищем, тогда extra метод
Получая это значение мы можем котролировать значения которые будут возвращены к нашим объектам.
Мы даже можем создать новый аттрибут и вернуть объекту "ненайденный аттрибут".
✅Ниже показано определение метода
Примечание:
🔴Будьте осторожны при реализации такого динамического метода, как __getattr__,
и используйте его с осторожностью. При реализации __getattr__,
поднять AttributeError.
Есть возможность контролировать способы получения аттрибутов из объекта , с помощью магического метода
__getattr__
.Когда мы вызваем что-то вроде
<myobject>.<myattribute>
,Python будет искать <myattribute>
в библиотеке объекта, вызвав __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.
📌ГЕТТЕРЫ И СЕТТЕРЫ В python
(Инкапсуляция)
В ЯП python по умолчанию все атрибуты в классах являются общедоступными(public), это значит , что из любого места программы мы можем получить аттрибут объекта и изменть его.
🎯Пример:
✅Результат:
В примере выше мы показали что без икапсуляции можно нежелательным образом изменять аттрибуты класса.
Не зря инкапсуляция является несущим звеном в мире ООП.
⚠️
На вопрос что такое инкапсуляция в программировании нужно ответить следующим образом.
Инкапсуляция предотвращает прямой доступ к атрибутам объект из вызывающего кода.
Касательно инкапсуляции непосредственно в языке программирования Python, скрыть атрибуты класса можно сделав их приватными или закрытыми и ограничив доступ к ним через специальные методы, которые еще называются свойствами.
Изменим выше определенный класс, определив в нем свойства:
Для создания приватного атрибута в начале его наименования ставится двойной прочерк:
👉Аннотации свойств
Выше мы рассмотрели, как создавать свойства. Но Python имеет также еще один - более элегантный способ определения свойств. Этот способ предполагает использование аннотаций, которые предваряются символом @.
Для создания свойства-геттера над свойством ставится аннотация
Для создания свойства-сеттера над свойством устанавливается аннотация имя_свойства_геттера.setter.
(Инкапсуляция)
В ЯП 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.
📌Библиотека 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
Библиотека 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
📌Основные элементы графика в библиотеке Matplotlib.
Сегодня рассмотрим основные термины и понятия, касающиеся изображения
графика, с которыми вам необходимо будет познакомиться.
Далее мы будем использовать термин "график" для обозначения всего
изображения, которое формирует Matplotlib (см. рисунок под статьей), и линии,
построенной по заданному набору данных.
Корневым элементом, на котором Matplotlib строит изображение,
является фигура (Figure). Всё, что перечислено на рисунке — это
элементы фигуры. Рассмотрим её составляющие более подробно.
👉График
На рисунке ниже представлены два графика — линейный и точечный.
Matplotlib предоставляет огромное количество различных настроек,которыеможноиспользовать для того, чтобы придать графику требуемый вид: цвет, толщина, тип, стиль линии и многое другое.
👉Оси
Вторым по важности элементом фигуры являются оси. Для каждой оси
можно задать метку (подпись), основные (major) и дополнительные
(minor) тики, их подписи, размер, толщину и диапазоны.
👉Сетка и легенда
Сетка и легенда являются элементами фигуры, которые значительно
повышают информативность графика. Сетка может быть основной
(major) и дополнительной (minor). Каждому типу сетки можно задавать
цвет, толщину линии и тип. Для отображения сетки и легенды
используются соответствующие команды.
Ниже представлен код, с помощью которого был построен график,
изображённый на рисунке.
✅
Сегодня рассмотрим основные термины и понятия, касающиеся изображения
графика, с которыми вам необходимо будет познакомиться.
Далее мы будем использовать термин "график" для обозначения всего
изображения, которое формирует 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()
Какой элемент является корневым в библиотеке Matplotlib для строения изображения.
Anonymous Quiz
67%
Figure(Фигура)
24%
Subplot(Подграфик)
9%
XAxis (Ось Х)
1%
YAxis (Ось Y)
Для чего нужны сетка и легенда?
Anonymous Quiz
14%
Для нарисования графика
84%
Для повышении информативности графика
3%
Они не нужны
Каким(-их видов) может быть сетка?
Anonymous Quiz
6%
Middle
5%
Major
30%
Middle и Major
6%
Minor
53%
Minor и Major
Друзья, вы просили иногда делиться лучшими вакансиями в ИТ.
Вот и она!
Джедай PHP на Laravel (Игровой сектор)
Требования:
- Рассмотрим спеца с коммерческим опытом и хорошим кодом /строгое и полное соблюдение PSR стандартов, углубленные знания SQL
- Умение анализировать и оптимизировать запросы, проектировать структуры таблиц с максимальной производительности
- Написание автоматических тестов
- Понимание REST API и протокола HTTP
- Опыт работы с Git, Composer
- Опыт работы с Jira/Gitlab
Условия:
- Работаем удаленно
- З/П 150 000 - 180 000 рублей
Контакты: @Olga_EORA
Вот и она!
Джедай PHP на Laravel (Игровой сектор)
Требования:
- Рассмотрим спеца с коммерческим опытом и хорошим кодом /строгое и полное соблюдение PSR стандартов, углубленные знания SQL
- Умение анализировать и оптимизировать запросы, проектировать структуры таблиц с максимальной производительности
- Написание автоматических тестов
- Понимание REST API и протокола HTTP
- Опыт работы с Git, Composer
- Опыт работы с Jira/Gitlab
Условия:
- Работаем удаленно
- З/П 150 000 - 180 000 рублей
Контакты: @Olga_EORA
Как писать хороший код на 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! – Пространства имен - одна отличная идея - давайте сделаем их больше!
Эти факторы можно быстро заполучить просто написав в интерпретаторе
***
Без пониманий этих факторов ваш код будет непригодным для больших, и без того сложных проектов.
***
✅Умение правильно и хорошо писать код — это важный навык для 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
После чего вы получите данный список.***
Без пониманий этих факторов ваш код будет непригодным для больших, и без того сложных проектов.
***
Кто Автор Работы «The Zen of Python»?
Anonymous Quiz
3%
Стивен Спилберг
44%
Гвидо ван Россум
43%
Тим Питерсон
10%
Бьёрн Страуструп
Как получить полный список The Zen of Python
Anonymous Quiz
16%
Скачать из интернета
73%
Использовать интерпретатор
11%
Cпросить у автора
#подработка
Нужен разработчик Golang для выполнения разовой задачи.
Суть задачи:
— Сделать файловый сервер с разграничением прав доступа к файлам.
— Работа с базой данных PostrgeSQL.
— Отдача файлов на загрузку.
— Проверка доступа по одноразовому токену
— HTTP сервер.
P.S.
Простейший скрипт, не нужно чего-то сложного. Схема и описание задачи готово. По нашим ожиданиям, это займёт у вас не более 3 дней.
Контакты: @Olga_EORA
Нужен разработчик Golang для выполнения разовой задачи.
Суть задачи:
— Сделать файловый сервер с разграничением прав доступа к файлам.
— Работа с базой данных PostrgeSQL.
— Отдача файлов на загрузку.
— Проверка доступа по одноразовому токену
— HTTP сервер.
P.S.
Простейший скрипт, не нужно чего-то сложного. Схема и описание задачи готово. По нашим ожиданиям, это займёт у вас не более 3 дней.
Контакты: @Olga_EORA