Архив метки: Python

Что должен знать аналитик данных?

Аналитика данных –это прикладной предмет, объединяющий статистику, математику, систему управления базами данных, информатику, а также навыки, связанные с предметной областью. Специалисту анализа данных нужно обладать некоторыми знаниями обо всех сферах, а также быть экспертом в нескольких из них. Одно из основных отличий аналитики от ИТ заключается в том, что специалисту по данным нужно хорошо понимать продукт.

Аналитика данных связана с предоставлением полезной информации из обширных бизнес-данных, которые организация может использовать для получения выгод путем принятия обоснованных решений. Еще один важный аспект, в котором аналитика отличается от ИТ, заключается в том, что опыт в аналитике дает гибкость для работы над разными типами бизнес-задач, где по прошествии определенного времени (например 15-ти летнего опыта), технические навыки могут не соответствовать желаемым, и кому-то нужно взять на себя управление проектами.

 

В каких отраслях нужна аналитика данных?

Область науки о данных привлекает профессионалов из различных секторов, объединяющих как ИТ, так и не ИТ, поскольку возможности роста в некоторых ранее бурно развивающихся отраслях со временем стали очень ограниченными из-за быстрых преобразований в бизнес-сценариях. Сдвиг парадигмы в распространенных технологиях в деловом мире VUCA (этим термином обозначается неопределенность и быстрая изменчивость всех явлений в настоящем мире) потребовал появления новых технологий и наборов навыков для поддержки в новую эру. Для этого необходимо, чтобы многие профессионалы, обладающие навыками в области устаревших ИТ-технологий, были переведены на использование аналитики и анализа данных нового поколения. Возникает вопрос, как кто-то с традиционными знаниями или новичок из секторов, не связанных с ИТ, может быстро вооружиться навыками Data Science. Эта статья должна пролить свет на эту часть.

Как обсуждалось ранее, Data Science представляет собой объединение различных областей. Со временем кто-то, работающий в этой сфере, будет получать все больше и больше знаний, однако, каковы базовые минимальные навыки, необходимые для быстрого старта? На это нет прямого ответа. Тем не менее, здесь представлены некоторые идеи, которые могут помочь начинающим энтузиастам аналитики определить приоритеты для продвижения по карьерной лестнице и одновременно сформировать свои карьерные цели.

 

Какие знания требуются от аналитика данных?

Основные требования к этой профессии можно посмотреть в соответствующих вакансиях или программах онлайн обучения. Для удобства вы можете использовать подборку онлайн-курсов по аналитике данных на этом сайте https://kursberry.ru/category/online-kursy-po-analitike для того, чтобы подробнее ознакомиться с учебными материалами.

Excel — это старая рабочая лошадка, удовлетворяющая 70% потребностей анализа данных уже более полутора десятилетий. Некоторые функции Excel, такие, как Goal Seek, Pivot Table и т. д., принесли огромную пользу бизнесу для получения полезной информации из большого массива данных. Чтобы начать карьеру в аналитике, необходимо знать все полезные функции Excel.

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

Получение знаний в этих двух областях откроет путь к переходу на следующий уровень.



Выводная статистика и язык программирования

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

Базовое программирование на Python — программирование на Python к настоящему времени стало неотъемлемой частью науки о данных. Чтобы вступить в мир аналитики, нужно знать хотя бы один язык программирования. Для тех, кто более заинтересован в решении задач на основе статистики, язык программирования R более предпочтителен, библиотека статистических функций становится богаче, однако тем, кто хочет выполнять высокопроизводительные операции в машинном обучении и искусственном интеллекте, следует выбрать Python.

 

Применение знаний на практике и машинное обучение

Исследовательский анализ данных. Отсюда начинающие аналитики начнут работать с реальными бизнес-данными и получат идеи о том, как использовать полученные статистические и программные знания для решения реальных проблем. Аналитики получат базовые навыки исследовательского анализа данных, включая вменение недостающих данных, обнаружение и удаление выбросов, преобразование данных и уменьшение размерности. Фундамент в этой теме проложит путь к следующему уровню решения проблем.

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

 

Где можно обучиться на аналитика данных?

Если вы планируете перейти на должность аналитика данных, но не имеете знаний и опыта работы в отрасли, вы, вероятно, можете начать с онлайн-курсов по этой теме. Курс укрепит ваши фундаментальные знания предмета, а также позволит разрабатывать практические проекты, учиться и развивать свои навыки. Подобрать для себя подходящий онлайн-курс можно на маркетплейсе Курсберри.

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



2021-09-23T16:54:25
Python

Криптография с Python

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

Python предоставляет несколько очень сложных библиотек и модулей для шифрования и дешифрования данных. Некоторые из них — Cryptography, hashlib, Simple-Crypt и т. д. В статье демонстрируется использование современных методов криптографии в Python с помощью библиотеки криптографии, демонстрируя, как шифровать и дешифровать текстовые строки и файлы.

 

Установка библиотеки криптографии

Cryptography — это библиотека на языке Python, которая предоставляет пользователям различные способы криптографии; одна из них — простое шифрование и дешифрование данных. Используйте следующую команду для установки библиотеки криптографии.

ubuntu@ubuntu:~$ pip install cryptography

Шифрование текста

Импорт Fernet

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

from cryptography.fernet import Fernet

Генерация ключа

Теперь сгенерируйте ключ аутентификации, определив функцию или просто используя генератор fernet в Python. Функция Fernet.generate_key() сгенерирует ключ для шифрования и дешифрования. Добавьте в код следующую строку:

>> key = Fernet.generate_key()

 

Теперь будет создан экземпляр класса Fernet с использованием сгенерированного ключа.

>> fernet= Fernet(key)

Шифрование текстовой строки

Теперь для шифрования текста достаточно нескольких строк кода. Добавьте следующие строки, чтобы зашифровать текст.

>> message = “This text will be encrypted”



>> encrypted_message= fernet.encrypt(message.encode())



>> print(‘исходная текстовая строка:’, message)



>> print(‘сообщение после шифрования:’ encrypted_message)

 

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

$python main. py

original text string: This text will be encrypted message after encryption: gAAALI2cFS8dTm87KKKadrptluse5CM4t9_

 

Расшифровка текстовой строки

После шифрования строки с помощью метода шифрования хорька расшифруйте текст обратно в исходную форму. Успешное дешифрование гарантирует, что получатель может без проблем расшифровать информацию и получить к ней доступ.

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

decrypted_message=fernet.decrypt(encrypted_message).decode()



print(‘расшифрованная строка текста:’, decrypted_message )

 

В приведенных выше строках кода используется тот же экземпляр Fernet, который использует ключ, сохраненный в памяти программы, для дешифрования. Функция fernet.decrypt() возвращает закодированную строку после расшифровки, как она была закодирована до шифрования. Теперь функция декодирования возвращает закодированную строку в исходную форму.

 

Шифрование файлов

Как и при шифровании текста, импортируйте модуль fernet для шифрования файлов и генерации ключей. Импортируйте модуль fernet из библиотеки Cryptography.

from cryptography.fernet import Fernet

Генерация ключей

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

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

>> key = Fernet.generate_key()



>> with open('keyfile.key', 'wb') as keyfile:



keyfile.write(key)

 

Этот код сгенерирует случайную буквенно-цифровую строку и сохранит ее в файле keyfile.key.

 

Шифрование

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

>> with open('keyfile.key', 'rb') as keyfile:



>> key= keyfile.read()

 

Использование ключа для экземпляра fernet:

>> fernet= Fernet(key)

 

Откройте и прочтите файл, который нужно зашифровать, и зашифруйте данные в файле с помощью шифрования Fernet:

>> with open('list.csv', 'rb') as original_file:



original_data = original_file.read()



>> Encrypted_data= fernet.encrypt(original_data)

 

Теперь откройте файл в режиме записи и запишите зашифрованные данные обратно:

>> with open('list.csv', 'wb') as encrypted_file:



encrypted_file.write(encrypted_data)

 

При выполнении приведенного выше кода исходные данные файла заменяются массивом буквенно-цифровых строк.

 

Расшифровка файла

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

>> fernet= Fernet(key)



>> With open('list.csv', 'rb') as encrypted_file:



encrypted_data = encrypted_file.read()



>> decrypted_data = fernet.decrypt(encrypted_data)



>> with open('list.csv', 'wb') as decrypted_file:



decrypted_file.write(decrypted_data)

Заключение

Библиотека Cryptography — одна из многих библиотек и модулей, которые Python предлагает для безопасного обмена данными и шифрования. Модуль fernet библиотеки предоставляет встроенный генератор ключей и предоставляет функции шифрования и дешифрования для строки данных и больших файлов.



2021-09-01T10:02:29
Python

Как использовать модуль Decimal в Python

В этой статье будет рассмотрена статья по использованию модуля Decimal в Python. Его можно использовать для выполнения различных математических операций с числами с плавающей запятой или числами, содержащими десятичные точки. Все примеры кода в этой статье протестированы с Python 3.9.5 в Ubuntu 21.04.

 

О десятичном модуле

Десятичный модуль, как следует из названия, может использоваться для обработки чисел с десятичной запятой или чисел с плавающей запятой. Методы, включенные в этот модуль, помогают округлять десятичные числа, преобразовывать числа и выполнять арифметические вычисления. Он также уделяет большое внимание точности и точности, и каждое число после десятичной точки считается значимым. Десятичный модуль рассматривает такое число, как 1,40, как 1,40, а не как 1,4. Использование десятичного модуля можно лучше понять на примерах. Некоторые из них описаны ниже.

 

Выполнение основных математических вычислений с использованием десятичного модуля

Вы можете вызвать модуль Decimal для преобразования числа в десятичный тип в Python. В приведенном ниже примере кода показана разница между основным математическим делением чисел целочисленного типа и числами десятичного типа.

from decimal import Decimal



a = 10

b = 11

c = a / b

d = Decimal(a) / Decimal(b)

print (c, type(c))

print (d, type(d))

 

Первый оператор импортирует класс Decimal из модуля decimal. Затем создаются две переменные «a» и «b» с некоторыми значениями. Переменная «c» хранит значение, полученное путем деления переменной a на b. Затем тот же процесс повторяется путем преобразования чисел в объекты десятичного типа. После выполнения приведенного выше примера кода вы должны получить следующий результат:

0.9090909090909091 <class 'float'>

0.9090909090909090909090909091 <class 'decimal.Decimal'>

Как вы можете видеть в выходных данных выше, объект типа float показывает числа с меньшей точностью, чем объект типа decimal, поскольку он использует гораздо более агрессивный метод аппроксимации, чем объект типа decimal. По умолчанию число десятичного типа в Python показывает до 28 чисел. Вы можете изменить это значение в соответствии с вашими потребностями, вызвав метод getcontext, доступный в модуле decimal.

from decimal import Decimal

from decimal import getcontext



getcontext().prec = 50

a = 10

b = 11

c = a / b

d = Decimal(a) / Decimal(b)

print (c, type(c))

print (d, type(d))

В приведенном выше примере кода функция getcontext была импортирована, а точное положение было установлено до 50 позиций. Метод getcontext можно использовать для просмотра текущего контекста в потоке и изменения некоторых параметров конфигурации по умолчанию для десятичного модуля. После выполнения приведенного выше примера кода вы должны получить следующий результат:

0.9090909090909091 <class 'float'>

0.90909090909090909090909090909090909090909090909091 <class 'decimal.Decimal'>

Вы можете выполнять любой тип арифметических вычислений с объектами десятичного типа, которые вы можете выполнять с объектами типа float в Python. Большое количество конечных десятичных чисел в объектах десятичного типа может дать очень точные числа, которые особенно полезны в финансовых, бухгалтерских, критически важных научных приложениях и т. д.

Обратите внимание, что вы можете создавать числа десятичного типа из чисел с плавающей запятой, целых чисел и строк, содержащих числа, вызывая основной конструктор Decimal.

 

Округление чисел с помощью десятичного модуля

Модуль decimal поставляется с некоторыми предопределенными режимами округления, которые можно использовать для округления чисел с десятичными точками. Эти режимы называются ROUND_FLOOR, ROUND_CEILING, ROUND_HALF_DOWN, ROUND_HALF_UP, ROUND_UP, ROUND_DOWN, ROUND_HALF_EVEN и ROUND_05UP. Согласно официальной документации Python, вот что делает каждый из этих режимов:

  • ROUND_FLOOR: число округляется до отрицательной бесконечности.
  • ROUND_CEILING: число округляется до бесконечности или положительной бесконечности.
  • ROUND_HALF_DOWN: числа округляются до ближайшего числа. Если есть ничья, число округляется до нуля. Связи — это равноотстоящие числа, которые можно округлять как в большую, так и в меньшую сторону. Например, такое число, как 4,25, можно округлить как в сторону 4,2, так и 4,3.
  • ROUND_HALF_UP: числа округляются до ближайшего числа. Если есть ничья, число округляется от нуля.
  • ROUND_UP: число округляется от нуля.
  • ROUND_DOWN: число округляется до нуля.
  • ROUND_HALF_EVEN: числа округляются до ближайшего числа. Любые связи округляются до ближайшего четного целого числа.
  • ROUND_05UP: числа округляются от нуля, если последнее число равно 0 или 5. Если нет, то числа округляются до нуля.

В приведенном ниже примере кода показано поведение этих режимов.

import decimal

from decimal import Decimal

from decimal import getcontext



getcontext().prec = 2



getcontext().rounding = decimal.ROUND_FLOOR

print (Decimal(3.961) + Decimal(0))



getcontext().rounding = decimal.ROUND_CEILING

print (Decimal(3.961) + Decimal(0))



getcontext().rounding = decimal.ROUND_HALF_DOWN

print (Decimal(3.705) + Decimal(0))



getcontext().rounding = decimal.ROUND_HALF_UP

print (Decimal(3.775) + Decimal(0))



getcontext().rounding = decimal.ROUND_UP

print (Decimal(3.775) + Decimal(0))



getcontext().rounding = decimal.ROUND_DOWN

print (Decimal(3.609) + Decimal(0))



getcontext().rounding = decimal.ROUND_HALF_EVEN

print (Decimal(3.665) + Decimal(0))



getcontext().rounding = decimal.ROUND_05UP

print (Decimal(3.675) + Decimal(0))

Пример кода довольно прост. Для округления чисел установлена ​​точность 2 цифры. Метод округления изменяется путем установки значения объекта «округление» (часть основного контекста). После выполнения приведенного выше примера кода вы должны получить следующий результат, в котором каждая строка соответствует соответствующему режиму округления:

3.9

4.0

3.7

3.8

3.8

3.6

3.7

3.6

Округление с использованием метода квантования

Вы также можете использовать метод «квантования», доступный в десятичном модуле, для округления чисел. Процесс идентичен описанному выше методу. Однако вместо того, чтобы устанавливать числа точности отдельно, вы можете указать показатель степени в качестве аргумента метода квантования, чтобы округлить число до определенной позиции. Ниже приведен пример кода.

import decimal

from decimal import Decimal



rounded = Decimal(3.961).quantize(Decimal('1.0'), rounding=decimal.ROUND_FLOOR)

print (rounded)

Методу квантования был предоставлен показатель степени «1.0», а в качестве дополнительного аргумента был предоставлен метод округления. Он вернет число в формате XX. После выполнения приведенного выше примера кода вы должны получить следующий результат:

3.9

Сравнение двух десятичных чисел

Вы можете сравнить любые два объекта десятичного типа, используя метод «сравнения», доступный в десятичном модуле. Примеры ниже показывают его использование.

from decimal import Decimal



print (Decimal(1.2).compare(Decimal(1.1)))

print (Decimal(1.0).compare(Decimal(1.1)))

print (Decimal(1.0).compare(Decimal(1.0)))

Вы можете вызвать метод сравнения для объекта десятичного типа и указать другое число в качестве аргумента. Будет возвращено значение 0, 1 или -1 в зависимости от сравниваемых чисел. Значение 0 указывает, что оба числа равны, значение 1 указывает, что первое число больше второго числа, а значение -1 указывает, что первое число меньше второго. После выполнения приведенного выше примера кода вы должны получить следующий результат:

1

- 1

0

Заключение

Хотя модуль decimal чаще всего используется для управления точностью десятичного разделителя и округления чисел после десятичной точки, он поставляется с некоторыми другими полезными методами, которые в дальнейшем можно использовать для управления десятичными числами для получения точных результатов арифметических вычислений. Базовое использование модуля decimal было рассмотрено в этой статье, и этого должно хватить для большинства ситуаций. Но вы всегда можете узнать больше о расширенных методах из официальной документации Python.



2021-08-29T22:06:23
Python

Найти максимальное значение в списке Python

Никто из нас не может оспаривать, что Python — один из самых популярных и полезных языков программирования. Он предлагает широкий спектр типов данных, которые полезны в широком диапазоне приложений.

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

Из этой статьи Вы узнаете, как создать список Python, и предложите различные способы найти максимальное значение внутри списка.

 

Как создать список Python

Начнем с основ: как создать список.

Примечание
Если вы уже знакомы с созданием списков Python, можете пропустить.

Чтобы создать список в Python, мы добавляем все элементы (разделяя каждый элемент запятой) внутри пары квадратных скобок [].

Элементы в списке Python могут поддерживать различные типы данных, включая строки, целые числа, числа с плавающей запятой, словари и даже вложенные списки.

В следующем примере создается список my_list с различными элементами в нем.

# инициализировать пустой список

my_list = []

# список с целыми числами, строками, числами с плавающей запятой, словарями и вложенными списками

my_list_ = [10, "Hello World", 10.1, ["nested_list", {"key": "value"}, 10]]

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

 

Как получить доступ к элементам списка

Мы можем получить доступ к элементам в списке, используя различные методы. Для простоты мы обсудим только два метода.

Первый:

1: Индексирование массива

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

Примечание
Индексирование в Python начинается с индекса 0. Это означает, что первый элемент в списке всегда имеет индекс 0.

Рассмотрим пример ниже:

db = [

"MySQL",

"PostgreSQL",

"SQLite",

"MongoDB",

"MariaDB",

"Redis",

"Microsoft SQL server",

"Oracle",

"Firebase",

"Elasticsearch"

]

Допустим, в приведенном выше списке представлены самые популярные базы данных. Чтобы найти наиболее используемую базу данных, мы можем использовать синтаксис:

print(db[0])

Приведенный выше оператор должен возвратить MySQL.

Примечание
Доступ к элементам из индекса списка приведет к ошибке индекса. Например, список БД содержит 10 элементов. Это означает, что индекс 10- го элемента равен 10 — 1, поскольку индекс начинается с 0.

 

Если мы попытаемся получить доступ к 10-му индексу, мы получим ошибку:

print(db[10])



IndexError: list index out of range

Вышеупомянутый метод полезен, когда вы знаете, сколько элементов находится в списке. Если вы не уверены в элементах в списке, вы можете использовать второй метод.

 

2: Использование цикла

Простой способ получить доступ ко всем элементам в списке — использовать простой цикл for. Пример кода для этого ниже:

db = [



"MySQL",



"PostgreSQ;",



"SQLite",



"MongoDB",



"MariaDB",



"Redis",



"Microsoft SQL server",



"Oracle",



"Firebase",



"Elasticsearch"



]



for item in db:



print(item)

Это зациклит каждый элемент в списке db и распечатает каждый элемент в нем.

Пример вывода для этого:

MySQL



PostgreSQ;



SQLite



MongoDB



MariaDB



Redis



Microsoft SQL server



Oracle



Firebase



Elasticsearch

 

Как найти максимальное значение в списке Python

Теперь давайте погрузимся в суть этой статьи; как найти максимальное значение в списке. Для этого мы будем реализовывать различные методы для достижения того же результата.

 

1. Использование метода сортировки

Первый метод, который мы можем использовать для поиска максимального значения в списке Python, — это метод сортировки.

Для этого мы передаем имя списка методу sort(), который отсортирует все значения в порядке возрастания. После процесса сортировки списка мы можем получить доступ к последнему элементу в массиве, чтобы получить наибольшее значение.

Например, рассмотрим массив значений ниже:

values = [



10, 29.34, 23, 72, 110, 773, 322, 63, 1, 34, 5, 10, 64.3



]

 

Мы можем просто вызвать метод сортировки по списку выше и получить последний элемент.

Чтобы получить последний элемент в массиве, мы можем использовать опцию индексирования и указать индекс как -1, который является последним элементом.

Рассмотрим пример кода ниже:

values = [



10, 23, 72, 110, 773, 322, 63, 1, 34, 5, 10



]



values.sort()



print(f"The maximum value in the list is: {values[-1]}")

Запустив приведенный выше код, мы должны получить максимальное значение как:

The maximum value in the list is: 773

 

2. Использование If… else

Другой простой способ получить максимальное значение в списке — использовать простой оператор if… else.

Чтобы реализовать это, мы сначала предполагаем, что наибольшее значение — это первый элемент в индексе. Затем мы перебираем каждый элемент в списке и проверяем, не превышает ли он начальное значение. Следовательно, оно установлено как максимальное значение; в противном случае переходите к следующему.

Рассмотрим реализацию ниже:

values = [



10, 23, 72, 110, 773, 322, 63, 1, 34, 5, 10



]



# предположим, что максимальное значение равно индексу 0



maximum = values[0]



for i in values:



if i > maximum:



maximum = i



print(f"Максимальное значение составляет: {maximum}")

 

Точно так же, если мы запустим приведенный выше код, мы должны получить максимальное значение 773. Вот пример вывода:

Максимальное значение составляет: 773

 

3: Использование функции Max

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

Вот пример:

values = [



10, 23, 72, 110, 773, 322, 63, 1, 34, 5, 10



]



print(f"Максимальное значение составляет: {max(values)}")

 

4: Использование метода Nlargest очереди кучи

Нетрадиционный способ найти наибольшее значение в списке — использовать метод nlargest в модуле Heap Queue.

Этот модуль реализует алгоритм очереди кучи. Узнайте больше о модуле очереди кучи Python.

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

Например:

from typing import ValuesView



import heapq



values = [



10, 23, 72, 110, 773, 322, 63, 1, 34, 5, 10



]



print(f"Максимальное значение составляет {heapq.nlargest(1, values)}")

 

Приведенный выше код должен вернуть значение 773.

Максимальное значение составляет: 773

 

Чтобы отобразить 5 наибольших значений, установите количество элементов на 5 следующим образом:

from typing import ValuesView



import heapq



values = [



10, 23, 72, 110, 773, 322, 63, 1, 34, 5, 10



]



print(f"Максимальными значениями по порядку являются {heapq.nlargest(5, values)}")

 

Это должно вернуть результат, аналогичный показанному ниже:

Максимальными значениями по порядку являются [773, 322, 110, 72, 63]

 

Хотя описанный выше метод может оказаться излишним, в некоторых случаях он может оказаться полезным.

 

Заключение

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

Спасибо за чтение!



2021-08-23T22:47:09
Python

Как использовать функции Eval и Exec в Python

В этой статье будет рассмотрено руководство по использованию функций «Eval» и «Exec», доступных в стандартной библиотеке Python. Эти функции можно использовать по-разному для оценки и выполнения выражений Python. Использование обеих этих функций можно лучше понять на примерах. Некоторые примеры приведены ниже. Все примеры кода в этой статье протестированы с Python 3.9.5 в Ubuntu 21.04.

 

Использование Eval для оценки выражений Python

Функция Eval может использоваться для оценки выражений Python и получения из них возвращаемого значения. Любое выражение Python, которое необходимо вычислить, передается функции eval в виде обязательного аргумента. Выражения, переданные в качестве аргумента функциям Eval, имеют полный доступ к встроенным функциям Python, а также к глобальным и локальным пространствам имен. Взгляните на пример кода ниже:

n = 1



result = eval('''n * 2''')



print (result)



eval('''print(n * 2)''')

Тройные кавычки в приведенном выше примере используются для представления строк «как есть», без экранирования специальных символов или внесения каких-либо других изменений. Первый оператор в примере кода определяет переменную с именем «n», имеющую значение 1. Затем вызывается метод eval, передавая ему выражение Python в строковом формате. В строковом выражении имеется ссылка на переменную «n», поскольку она уже доступна в пространстве имен. Следующая инструкция печатает вывод переменной «результат». Последний оператор показывает, что вы можете напрямую вызывать встроенные функции Python в выражении, передаваемом функции eval в качестве аргумента.

После выполнения приведенного выше примера кода вы должны получить следующий результат:

2



2

 

Как видно из выходных данных выше, оба оператора печати дают одинаковый результат.

Вы можете дополнительно предоставить настраиваемые словари для глобальных и локальных пространств имен, чтобы ограничить и контролировать разрешенные объекты пространства имен. Взгляните на пример кода ниже:

n = 1



result = eval('''n * 2''')



print (result)



eval('''print(m * 2)''', {'m': 1})



eval('''print(n * 2)''', {'m': 1})

В операторе eval в четвертой строке предоставляется дополнительный аргумент, в котором используется словарь настраиваемых объектов глобального пространства имен. Когда вы предоставляете словарь настраиваемых глобальных объектов, eval использует только встроенные методы и сопоставления, включенные в словарь. Если вы используете пустой глобальный словарь («{}»), разрешены только встроенные методы и даже не настраиваемый импорт. Поскольку объект «m» в глобальном словаре имеет значение 1, оператор eval может использовать ссылку для «m». В последнем операторе объект «m» доступен в глобальном словаре, но не переменная «n», поскольку был предоставлен настраиваемый словарь глобальных объектов. Последний оператор вызовет ошибку, поскольку в пользовательском глобальном словаре пространства имен нет определения для «n».

После выполнения приведенного выше примера кода вы должны получить следующий результат:

2



2



Traceback (most recent call last):



File "/home/user/Downloads/./test.py", line 7, in <module>



eval('''print(n * 2)''', {'m': 1})



File "<string>", line 1, in <module>



NameError: name 'n' is not defined

Вы можете использовать словарь для объектов локального пространства имен так же, как и для объектов глобального пространства имен. Просто предоставьте пользовательский словарь в качестве третьего аргумента функции eval, чтобы использовать его в качестве сопоставления для объектов локального пространства имен.

 

Использование Exec для запуска кода Python

Функция exec работает аналогично функции eval с некоторыми отличиями. Выражение, передаваемое функции exec, может быть строкой или любым другим допустимым объектом Python, содержащим допустимый код Python. Для сравнения, функция eval принимает только строковые выражения. Вы также можете предоставить настраиваемые словари как для глобальных, так и для локальных объектов пространств имен, и метод exec ведет себя так же, как функция eval, когда используются сопоставления настраиваемых пространств имен. Еще одно отличие от функции eval заключается в том, что функция exec всегда возвращает значение «None». Взгляните на пример кода ниже:

n = 1



result = exec('''n * 2''')



print (result)



exec('''print(n * 2)''')



result = '''print(n * 2)'''



exec(result)

Блок кода очень похож на образец кода, использованный в примере eval, но вместо функции eval теперь используется функция exec. После выполнения приведенного выше примера кода вы должны получить следующий результат:

None



2



2

Как было сказано ранее, функция exec всегда возвращает значение «None», поэтому третья строка выдает «None» в качестве вывода. Затем оператор exec в четвертой строке использует функцию print для вывода «2». Затем переменной результата присваивается новое значение путем предоставления ей действительного оператора кода Python в строковой форме. Последний оператор показывает, что функция exec может напрямую вызывать объекты кода, содержащие допустимый код Python. Также на выходе получается «2».

 

Соображения безопасности

При использовании функций eval и exec вы должны знать, что обе эти функции позволяют выполнять произвольные выражения Python и блоки кода. Если вы сознательно не осведомлены о том, что используется в выражениях, эти операторы могут нанести вред среде, в которой вы работаете. Например, вы можете непреднамеренно модифицировать, удалять или вносить необратимые изменения в файлы, хранящиеся на хосте, используя модули «os» и «sys» и их методы в функциях eval и exec. Модуль «подпроцесс» в Python позволяет запускать новые процессы и выполнять команды оболочки. Выражения в методах eval и exec, использующие модуль подпроцесса, могут привести к непреднамеренному поведению, если вы не будете осторожны с тем, что используется в выражениях.

 

Вывод

Оба метода eval и exec позволяют обрабатывать и выполнять фрагменты кода Python. Вы можете передавать операторы eval другим функциям Python в качестве аргументов, поскольку они всегда возвращают значение, что немного похоже на лямбда-функции в Python. Точно так же вы можете использовать функцию exec для выполнения предопределенного кода Python. Чаще всего он используется, когда код Python нужно читать из одного файла и выполнять в другом.



2021-08-13T19:15:29
Python

Как проверить, открыт или закрыт файл в Python

Файл используется для постоянного хранения данных. Работа с файлом — очень распространенная задача любого языка программирования. В Python существует множество встроенных функций для создания, открытия, чтения, записи и закрытия файла. Для хранения данных можно создать два типа файлов. Это текстовые файлы и двоичные файлы. Любой файл необходимо открыть перед чтением или записью. Функция open() используется в Python для открытия файла. Использование функции open() — это один из способов проверить, открыт или закрыт конкретный файл. Если функция open() открывает ранее открытый файл, генерируется ошибка IOError. Другой способ проверить, открыт или закрыт файл — это проверить значения свойства closed объекта обработчика файлов. С использованием функции rename() — еще один способ проверить, открыт или закрыт файл. В этой статье показаны различные способы проверки открытия или закрытия любого файла в Python.

 

Создайте файл для проверки:

Вы можете использовать любой существующий файл или создать новый файл, чтобы протестировать пример кода, показанный в этой статьи. Был создан новый текстовый файл с именем clients.txt со следующим содержимым для использования в следующей части статьи.


ID     Name                           Email

01     Andrey Ex                   Andrey***@gmail.com

02     Max Terminator              Max***@gmail.com

03    Alex Murphy                  Alex***@gmail.com

 

Пример-1: проверьте, открыт файл или нет, с помощью IOError

IOError генерируется при вызове функции open() для открытия файла, который был открыт ранее. Создайте файл python со следующим сценарием, чтобы проверить, открыт ли файл или нет, с помощью блока try-except. Здесь любое существующее имя файла будет принято в качестве входных и открыто для чтения. Затем снова вызывается функция open(), чтобы открыть тот же файл, который вызовет ошибку IOError и распечатает сообщение об ошибке.

# Введите имя файла для проверки

filename = input("Введите любое существующее имя файла:n")

# Откройте файл в первый раз с помощью функции open()

fileHandler = open(filename, "r")

# Попробуйте открыть файл с таким же именем снова

try:

with open("filename", "r") as file:

# Распечатать сообщение об успешном завершении

print("Файл открыт для чтения.")

# Вызовите ошибку, если файл был открыт раньше

except IOError:

print("Файл уже открыт")

Вывод:

Здесь в текущем расположении существует файл clients.txt, а сообщение об ошибке «Файл уже открыт» было напечатано для исключения IOError.

 

Пример-2: проверьте, закрыт ли файл, используя свойство closed.

Значение свойства closed будет истинным, если какой-либо файл закрыт. Создайте файл python с помощью следующего сценария, чтобы проверить, закрыт ли файл в текущем местоположении. Предыдущий пример сценария выдаст ошибку, если имя файла, полученное от пользователя, не существует в текущем местоположении. В этом примере эта проблема решена. Модуль os используется здесь для проверки существования имени файла, которое будет взято у пользователя. Функция check_closed() определена для проверки того, закрыт ли файл или нет, которая будет вызываться, если файл существует.

# Импортировать модуль os для проверки существования файла

import os

# Функция Drfine проверяет, закрыт ли файл или нет

def check_closed():

if fileHandler.closed == False:

# Распечатать сообщение об успешном завершении

print("Файл открыт для чтения.")

else:

# Распечатать сообщение об ошибке

print(" Файл закрыт.")



# Взять имя файла для проверки

filename = input(" Введите любое существующее имя файла:  n ")

# Проверить, существует

if os.path.exists(filename):

# Открыть файл для чтения

fileHandler = open(filename, "r")

# Вызвать функцию

check_closed()

else:

# Вывести сообщение, если файл не существует

print("Файл не существует.")

Вывод:

Здесь client.txt существует в текущем месте, и сообщение об успешном завершении «Файл открыт для чтения» напечатано, поскольку значение свойства closed вернуло False.

 

Пример-3: проверьте, открыт файл или нет, с помощью OSError

OSError генерирует , когда функция переименования() вызывается более чем один раз для файла , который открыт уже. Создайте файл Python со следующим сценарием, чтобы проверить, открыт или закрыт файл с помощью OSError. Модуль os использовался в сценарии для проверки существования файла и его переименования. Когда функция rename() вызывается во второй раз, будет сгенерирована ошибка OSError, и будет напечатано настраиваемое сообщение об ошибке.

# Импортировать модуль os для проверки существования файла

import os

# Установить существующее имя файла

filename = 'clients.txt'

# Установить новое имя файла

newname = 'customers.txt'

# Проверить, существует ли файл или нет,

if os.path.exists(filename):

try:

# Вызов функции переименования в первый раз

os.rename(filename, newname)

# Вызов функции переименования во второй раз

os.rename(filename, newname)

# Вызов исключения при ошибки, если если файл открыт

except OSError:

print («Файл все еще открыт».)



else:

# Вывести сообщение, если файл не существует

print("Файл не существует.")

Вывод:

Здесь clients.txt существует в текущем местоположении, и сообщение об ошибке, “File is still opened,” напечатал , потому что OSError исключение генерируется , когда вторая функция rename() выполнена.

 

Вывод:

Когда нам нужно работать с одним и тем же файлом в сценарии несколько раз, важно знать, открыт ли файл или закрыт. Лучше вызвать функцию close(), чтобы закрыть файл после завершения операции с файлом. Ошибка возникает, когда файл открывается во второй раз в том же скрипте, не закрывая его. В этой статье на простых примерах показаны различные решения этой проблемы, которые помогут пользователям Python.



2021-07-24T10:29:04
Python