Автор оригинала: Chris.
Python MemoryView (ARG)
Функция возвращает MemoryView
объект данного байта или аргумента Bytearray. Это обнародует внутренние данные аргумента (буферы), чтобы помочь вам получить доступ к данным без промежуточного копирования.
Syntax: memoryview(object)
Аргументы | объект | BYTES или BYTEARRAY объект, для которого следует возвращать MemoryView |
Возвращаемое значение | MemoryView. | Возвращает MemoryView объекта. |
Python MemoryView () – примеры использования
Узнайте пример! В следующем мы собираемся исследовать пример того, почему и как использовать MemoryView ()
Встроенная функция Отказ
Простое использование MemoryView ()
это пройти байтовую строку B'hello World '
В качестве аргумента:
>>> view = memoryview(b'hello world') >>> view
Объект View имеет тип MemoryView. Вы можете получить доступ к однокодам каждой буквы, используя простую индексацию:
>>> view[0] 104
Если вы преобразуете этот первый номер Unicode для персонажа с помощью str ()
Встроенная функция, вы видите, что это относится к первому персонажу ByteString, то есть 'h'
Отказ
>>> chr(view[0]) 'h'
Python MemoryView () – Видео
Что такое MemoryView в Python?
Стандартное распределение Python, Cpython
, реализован с использованием языка программирования C. Если вы создаете объект BYTES или BYTEARRAY в Python, это будет отображено на объекте Memory-A C, а не объектом Python. По сути, Python – это просто виртуализация на вершине C! Если вы хотите сделать несколько грязных вещей, таких как доступ к объектам в памяти, вы можете использовать MemoryView
Объект, который действительно является ссылкой на реальный объект C в памяти – но это похоже на любой другой объект Python! Более конкретно, MemoryView
Объект открывает Интерфейс буфера в качестве объекта Python, который затем можно пропустить, как любой другой объект.
«Хотя каждый из этих типов имеет собственную семантику, они разделяют общую характеристику поддержки возможным большим буфером памяти. Затем он желательно, в некоторых ситуациях, чтобы получить доступ к этому буферу напрямую и без промежуточного копирования ». — Документы
При использовании байтов или ByTearrays в Python вы часто хотите напрямую получить доступ к данным в памяти. MemoryView ()
Функция позволяет вам сделать!
Оценка производительности: насколько эффективнее используется MemoryView?
В следующем эксперименте мы хотим ответить на вопрос, насколько более эффективным является использование объекта MemoryView при создании большого количества ломтиков на больших полях.
- Если вы не используете MemoryViews, вы создадите большое количество промежуточных объектов – по сути, снова и снова копируя те же данные.
- Если вы используете MemoryViews, вы избегаете этих избыточных копий.
Эффект может быть очень существенным, как показано на следующей графике оценки:
Эта графика является результатом выполнения следующего кода для оценки производительности на моем Win 10, Intel Core I7, 8 GEN машина:
import time sizes = range(100000, 600000, 100000) # Without Memoryview l1 = [] for n in sizes: data = b'x' * n start = time.time() b = data while b: b = b[1:] stop = time.time() print(f'bytes {n} {stop-start}') l1.append(stop-start) # With Memoryview l2 = [] for n in sizes: data = b'x' * n start = time.time() b = memoryview(data) while b: b = b[1:] stop = time.time() print(f'memview {n} {stop-start}') l2.append(stop-start) # Plot everything import matplotlib.pyplot as plt plt.plot(l1, 'x-', label='Without Memoryview') plt.plot(l2, 'o--', label='With Memoryview') plt.xlabel('Size of Bytearray') plt.ylabel('Time (s)') plt.legend() plt.show()
Численные результаты следующие:
bytes 100000 0.1532435417175293 bytes 200000 0.47913265228271484 bytes 300000 1.1720850467681885 bytes 400000 2.15946888923645 bytes 500000 3.440741777420044 memview 100000 0.0 memview 200000 0.015674114227294922 memview 300000 0.03777813911437988 memview 400000 0.04686594009399414 memview 500000 0.05336737632751465
Вы можете увидеть, что используя MemoryView
может привести к более радикальным улучшениям производительности!
Когда следует использовать MemoryView?
Предыдущий пример показал, что MemoryView более эффективен во многих отношениях, если вы используете нарезку на больших установках. По сути, MemoryView является обобщенным Numpy Array:
«MemoryView – это, по сути, обобщенная структура массива Numpy в самом Python (без математики). Это позволяет вам обмениваться памятью между Data-structures (такие вещи, как Pil-изображения, базы данных SQLite, Numpy actions и т. Д.) Без предварительного копирования. Это очень важно для больших наборов данных. С ним вы можете делать такие вещи, как Memory-map-map – очень большой файл, нарежьте кусок этого файла и выполните расчеты на этой части (простой, если вы используете Numpy). “ ( Источник )
Но прежде чем мы будем двигаться дальше, я рад представить вам мою новую книгу Python Python One-listers (Amazon Link).
Если вам нравятся одноклассники, вы будете любить книгу. Это научит вам все, что нужно знать о Одно строка кода Python. Но это тоже Введение в компьютерную науку , наука о данных, машин обучения и алгоритмы. Вселенная в одной строке Python!
Книга была выпущена в 2020 году с помощью книги по программированию мирового класса Nostarch Press (San Francisco).
Ссылка: https://nostarch.com/pythononeliners.
Резюме
Python MemoryView (ARG)
Функция возвращает MemoryView
объект данного байта или аргумента Bytearray.
Это обнародует внутренние данные аргумента (буферы), чтобы помочь вам получить доступ к данным без промежуточного копирования.
>>> x = memoryview(b'42') >>> x[0] 52 >>> x[1] 50 >>> x[2] Traceback (most recent call last): File "", line 1, in x[2] IndexError: index out of bounds on dimension 1
Я надеюсь, что вам понравилось статью! Чтобы улучшить свое образование Python, вы можете присоединиться к популярной академии по электронной почте Free Finxter:
Хотите увеличить свои навыки Python в веселой и легкой потребности? Рассмотрим следующие ресурсы и стать магистральным кодером!
Куда пойти отсюда?
Достаточно теории, давайте познакомимся!
Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?
Практические проекты – это то, как вы обостряете вашу пилу в кодировке!
Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?
Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.
Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.
Присоединяйтесь к свободному вебинару сейчас!
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.
Оригинал: “https://blog.finxter.com/python-memoryview-function/”