Kangaroo
2.28K subscribers
113 photos
61 files
434 links
Kangaroo — о программировании и технологиях.

Python, серверная разработка, инфраструктура, ИИ и собственные проекты. Статьи, технические разборы, эксперименты и наблюдения из практики.

Иногда — математика и котики :)

По всем вопросам: @Lodhel
Download Telegram
Изначально Интернет был задуман как всеобщая нейтральная сеть, в которой каждый может внести равный вклад и служить на благо обществу. Но сейчас большая часть интернет-ресурсов сосредоточена в руках корпораций. Они контролируют доступ к нашим важнейшим и конфиденциальным данным. Компании могут предоставлять услуги прекрасного качества, но все же это не совсем то, что предполагалось создать.

Децентрализованная система хранения информации обладает значительными преимуществами с точки зрения безопасности и эффективности, и в настоящее время она становится реальностью. Все больше и больше блокчейн-стартапов начинают реализовывать огромный потенциал технологии распределенного реестра и надстраивают новые компоненты на децентрализованной экосистеме.

@dcntr создан для того чтобы быть в курсе о проектах децентрализованных сетей.
t.me/dcntr
Сколько байт в int(1). Python
Final Results
58%
8
13%
16
7%
24
22%
32
Давайте разберёмся с тем как бы нам поменять значения в двух переменных не вводя так сказать временную переменную.

Первый способ.
Магия Python
a = 2
b = 3

a, b = b, a

Это конечно хороший способ но если кто не знает, то Python при этом создает новую переменную у себя внутри, по этому пойдем дальше.

Второй способ.
Математический.

a = 2
b = 3

a = a + b
b = a - b
a = a - b

Но и этот способ имеет свои недостатки. Это большое количество операций. Второй это область применения, только числа.

Еще 1 похожий на математический способ.
Использование xor.

a = 4
b = 5

a = a ^ b
b = a ^ b
a = a ^ b

Он так же как и математический способ имеет проблемы. Подходить для любых целочисленных значений.

Если кто знает еще способы обмена двух переменных то пишите сюда @ywjcpw , опбликуем )
🔥1
Разберемся с нашим опросом который мы опубликовали вчера вечером. В нем мы просили вас проголосовать за то сколько байт в int(1) в Python. Давайте теперь мы расскажем вам как там обстоят дела в Python с памятью на самом деле.

Приведем вам пример из кода:
a = int(1)
print(a.sizeof())

Выполним наш код в консоли на 64 битной машине: получим 24 бит.
Если выполнить данный код на 32 битной машине: 12 бит.
Столько же занимает и просто int().

obj.sizeof - возвращвет размеробъекта в битах.

Теперь вы знаете сколько байт занимает int(1) в Python.

Но давайте пойдем дальше и проверим сколько занимают другие типы данных в Python.
Возьмем самые часто используемые типы данных: int, float, tuple, str, list, dict. (размер будет указан в битах)

Int:
на 32 битной машине: 12.
на 64 битной машине: 24.
float:
на 32 битной машине: 16.
на 64 битной машине: 24.
str:
на 32 битной машине: 21+длина.
на 64 битной машине: 37+длина .
list:
на 32 битной машине: 20+4*длина.
на 64 битной машине: 40+8*длина.
tuple:
на 32 битной машине: 12+4*длина.
на 64 битной машине: 24+8*длина.

С dict дела обстоят интереснее:
на 32 битной машине:
длина <= 5, 124 бит.
длина >5, 124+12*длину.
на 64 битной машине:
длина <= 5, 248 бит.
длина >5, 248+24*длину.

Ну что же теперь мы знаем сколько бит выделяет Python для разных типов данных.

Ну а как сам Python работает с памятью, как работает “сборщик мусора” мы расскажем в другом посте.
Следите за обновлениями)
Как обрабатывать изображения в Python

https://morioh.com/p/f469f74855f6
Поговорим о терминах в асинхронном программировании на python.

Корутина — это асинхронная (async) функция. Корутина может быть и объектом, возвращённым из корутины-функции.

Если при объявлении функции указано то, что она является асинхронной, то вызывать её можно с использованием ключевого слова await:

await say_after(1, ‘hello’)


Такая конструкция означает, что программа будет выполняться до тех пор, пока не встретит await-выражение, после чего вызовет функцию и приостановит своё выполнение до тех пор, пока работа вызванной функции не завершится. После этого возможность запуститься появится и у других корутин.

Приостановка выполнения программы означает, что управление возвращается циклу событий. Когда используют модуль asyncio, цикл событий выполняет все асинхронные задачи, производит операции ввода-вывода и выполняет подпроцессы. В большинстве случаев для запуска корутин используются задачи.

Задачи позволяют запускать корутины в цикле событий. Это упрощает управление выполнением нескольких корутин. Вот пример, в котором используются корутины и задачи. Обратите внимание на то, что сущности, объявленные с помощью конструкции async def — это корутины.


import asyncio import time async

def say_after(delay, what):
    await asyncio.sleep(delay)     print(what)

async def main():     task1 = asyncio.create_task(say_after(1, 'hello'))
    task2 = asyncio.create_task(say_after(2, 'world'))     

print(f"started at {time.strftime('%X')}")     # Ждём завершения обеих задач (это должно занять     # около 2 секунд.)
   await task1     await task2     print(f"finished at {time.strftime('%X')}")

asyncio.run(main())
Что такое Бит и Байт?

Давайте разберемся, что же такое бит и байт. Бит, наименьшая единица, которая измеряет количество информации. Один содержит мало информации в отличие от группы битов. Для хранени информации используют всего два знака – цифры 0 и 1. Совокупность этих двух цифр называется двоичный код, а сами цифры принято называть двоичными цифрами или коротко битами. Компьютер различает 0 и 1 благодаря электрическим импульсам в электронных цепях. Если в цепи нет импульса – это цифра 0, если импульс есть, то это 1. Таким образом, в виде комбинации 0 и 1, внутри компьютера хранится абсолютно вся информация от фотографий до музыки. Наравне с понятием бита используется понятие байт.

Совокупность компьютерных данных из 8 бит называется байтом. 8 битов дают основу для представления символов, например буквы «А» и двоичной арифметики. То есть байт является командой битов, отвечающих за определенную деталь в файле. Каждый байт имеет в памяти компьютера уникальный адрес. По соглашению биты, и байты имеют нумерацию от 0 до 7 справа налево. Например: номер бита – 76543210, а значение его - 0 1 0 0 0 0 0 1 и в итоге, если передать это значение на принтер, там будет сгенерирована буква «А». Количество включенных битов в байте должно быть нечетно. Когда команда обращена к байту, компьютер проверяет этот байт и если число включенных битов четное, система выдает ошибку. Ошибка четности может быть результатом сбоя оборудования или случайным явлением, но это происходит очень редко.

Во время обработки данных, в компьютере по электронным цепям проходят электрические импульсы. Цепи состоят из проводников и электронных микро устройств, которые называются логическими вентилями. Импульсы, проходящие через эти вентили, могут «гаситься». Таким образом, обрабатываются данные. Объединяя логические вентили, создаются сложные комбинации, выполняющие операции – запоминают, сравнивают, складывают, сравнивают числа и прочее.

В кремниевых пластинках расположены электронные цепи. Каждая микросхема может содержать более миллиона цепей, от расположения зависит вид работы, которую они выполняют.
Микросхемы расположены на специальных пластинках, а именно на печатных платах. На самой плате напечатаны полоски, через которые проходит электричество к микросхемам. Металлические дорожки, которые называются шинами, передают байты, каждая шина содержит несколько таких дорожек. Одна дорожка передает один байт.

Шины делятся на три типа: шина данных, управления и адресная шина. Шина данных обменивается данными между процессором и устройствами ввода, между процессором и памятью компьютера. Инструкции от процессора ко всем узлам компьютера передаются по шине управления. С помощью адресной шины передается информация о местоположении или адресе данных.

Бит и байт это довольно маленькие величины, поэтому их используют с приставками кило, мега и гига. Давайте теперь поговорим о величине, которая измеряет скорость интернета. Скорость интернета, это количество отправляемой и получаемой информации вашим персональным компьютером в единицу времени. Качество единицы времени - секунда, а качество количества получаемой информации – килобит или мегабит. Например, если ваша скорость показывает 128 Kbps, значит, что ваше соединение пропускает 128 килобит что приравнивается к 16 килобайтам. Для того что бы узнать много это или мало воспользуйтесь тестами для определения скорости соединения с Интернетом.
Forwarded from CoolPython
Введение в множества

Set' ы в Python реализованы так, что максимально напоминают математические множества. Давайте пройдемся по основным свойствам и возможностям множеств в Python, и разберемся, как их использовать.

В математике множество -- это набор объектов произвольной природы. В Python множество тоже может содержать переменные разных типов, например:
 
>>> A = {"My hovercraft is full of eels", 42, (3.14, 2.72)}

Но есть одно ограничение: элементы множества должны быть хэшируемыми: например, в множество можно добавить строки, числа и кортежи, но нельзя словари и списки:
 
>>> A.add([-1, 0])
TypeError: unhashable type: 'list'

При этом поскольку сами множества мутабельны, то множество множеств, как в известном парадоксе про брадобрея, сделать не получится. Но если очень хочется, можно использовать frozenset’ы: эти объекты в остальном ведут себя почти так же, но они иммутабельны и их можно добавить в множество.

Инициализировать множество можно используя фигурные скобки или через конструктор класса set(). Эти инициализации эквивалентны:
 
>>> B = {1, 2, 3}
>>> B = set((1, 2, 3))

Только не запутайтесь: такая инструкция
 
C = {}

создаст не множество, а словарь.

В версиях интерпретатора 2.7 и выше работают set comprehensions:
 
>>> C = {x for x in range(1, 5)}
>>> C
{1, 2, 3, 4}

Элементы множества, как и в математике, должны быть уникальными. На практике этим пользуются для того, чтобы исключить повторяющиеся элементы:
 
>>> D = [1, 2, 3, 3]
>>> D = list(set(D))
>>> D
[1, 2, 3]

Кстати, множества не сохраняют порядок, поэтому если он нужен, то добро пожаловать в списки. Из-за того, что порядка нет, во множествах нет ни индексирования, ни слайсов. В то же время циклы по множеству можно делать обычным pythonic-способом:
 
>>> for elem in C:
... print(elem)

Над множествами в Python можно делать те же операции, что и в математике: находить объединение, пересечение, проверять принадлежность к множеству и так далее. Для этого можно пользоваться операторами, а можно методами множеств:
 
A | B A.union(B)
A & B A.intersection(B)
A - B A.difference(B)
A <= B A.issubset(B)
A => B A.issuperset(B)
…

Обратите внимание, что операторы принимают только set’ы, а методы -- любые iterable контейнеры. Есть мнение, что операторы менее читаемые, но оба подхода в целом равноправны.

И еще у класса set есть методы, которые удобны для работы со множествами как с коллекциями:

add() — добавить элемент,
remove() — удалить элемент,
pop() — извлечь с удалением,
update() — объединить с другим множеством,
clear() — очистить множество.

И напоследок: один раз я больно отстрелила себе ногу, когда хотела добавить составной элемент в множество с помощью неправильного инструмента. Например, если у нас есть множество строк и мы пытаемся добавить в него еще один элемент вот так:
 
>>> F = {"Seregia", "Vasia"}
>>> F.update("Alisa")

то получаем ожидаемый результат:
 
>>> F
{'l', 'a', 'Seregia', 'Vasia', 'A', 'i', 's'}

Это абсолютно валидный код и он отработает, поэтому такую ошибку по невнимательности можно искать довольно долго. Так что не попадайте в ловушку методов add() и update().

В общем, Python set'ы сильно напоминают математические множества: могут содержать объекты разных типов, требуют уникальности элементов, не сохраняют порядок и имеют методы, позволяющие их объединять, пересекать, etc... Кроме того, множества имеют интерфейс для работы с ними как с коллекциями.

Как определиться в выборе коллекции?
🐙 Если важен порядок — используйте списки.
🐙 Если нужно отображение ключ-значение — используйте словари.
🐙 Если нужен набор уникальных элементов — используйте множества.

#основы #типы_данных #comprehensions #списки #селяви #коллекции
Управление зависимостями Python и упаковка стали проще!
poetry помогает объявлять, управлять и устанавливать зависимости проектов Python, гарантируя правильный стек везде.

https://github.com/sdispater/poetry