AZ полезных приемов Python

az poleznyh priemov python?v=1656550460

Python является одним из самых популярных и востребованных языков программирования в мире. Это по многим причинам:

  • это легко научиться
  • это супер универсально
  • он имеет огромный ассортимент модулей и библиотек

Я ежедневно использую Python в качестве неотъемлемой части моей работы ученого из данных. По дороге я подобрал несколько полезных приёмов и советов.

Здесь я поделился некоторыми из них в формате AZ.

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

Тем не менее, заслуга там, где это принадлежит, я нашел четыре или пять из них на awesome-python.com. Это подборный список сотен интересных инструментов и модулей Python. Следует посмотреть для вдохновения!

все или любые

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

Часто шутят, что Python – это «выполняемый псевдокод». Но когда вы можете написать такой код, трудно утверждать обратное:

x = [True, True, False]
if any(x):
    print("At least one True")
if all(x):
    print("Not one False")
if any(x) and not all(x):    
    print("At least one True and one False")

bashplotlib

Вы хотите построить графики в консоли?

$ pip install bashplotlib

Вы можете иметь графики в консоли.

коллекции

У Python есть несколько отличных типов данных по умолчанию, но иногда они просто не будут вести себя так, как вы хотели бы.

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

from collections import OrderedDict, Counter

# Remembers the order the keys are added!
x = OrderedDict(a=1, b=2, c=3)

# Counts the frequency of each character
y = Counter("Hello World!")

реж

Вы когда-нибудь задумывались, как можно заглянуть внутрь объекта Python и увидеть, какие атрибуты у него есть? Конечно, есть.

С командной строки:

>>> dir()
>>> dir("Hello World")
>>> dir(dir)

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

Детальнее читайте здесь.

эмоди

Да конечно.

$ pip install emoji

Не притворяйся, что не попробуешь…

from emoji import emojize
print(emojize(":thumbs_up:"))

?

с __будущего__ импорта

Одним из последствий популярности Python есть то, что постоянно разрабатываются новые версии. Новые версии означают новые функции, если ваша версия не устарела.

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

from __future__ import print_function
print("Hello World!")

Почему бы не попытаться импортировать фигурные скобки?

геопия

География может быть сложной местностью для программистов (га, каламбур!). Но модуль geopy делает это очень просто.

$ pip install geopy

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

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

from geopy import GoogleV3

place = "221b Baker Street, London"
location = GoogleV3().geocode(place)
print(location.address)
print(location.location)

Как мне

Застряли на проблеме кодирования и не можете упомянуть решение, которое вы видели раньше? Нужно проверить StackOverflow, но не хотите оставлять терминал?

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

$ pip install howdoi

Задайте ему любой вопрос и он сделает все возможное, чтобы ответить.

$ howdoi vertical align css
$ howdoi for loop in java
$ howdoi undo commits in git

Но имейте в виду – он извлекает код из самых популярных ответов из StackOverflow. Это может не всегда давать наиболее полезную информацию.

$ howdoi exit vim

осматривать

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

В следующем примере кода используется inspect.getsource() распечатать собственный исходный код. Он также использует inspect.getmodule() распечатать модуль, в котором он был определен.

Последняя строка кода печатает свой номер строки.

import inspect

print(inspect.getsource(inspect.getsource))
print(inspect.getmodule(inspect.getmodule))
print(inspect.currentframe().f_lineno)

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

Джедай

Библиотека Jedi – это библиотека автозаполнения и анализа кода. Это делает написание кода более быстрым и производительным.

Если вы не разрабатываете собственную IDE, вам, вероятно, больше всего заинтересует использование Jedi в качестве плагина редактора. К счастью, их уже есть в наличии!

Однако, возможно, вы используете джедаев. Проект IPython использует Jedi для функции автозаполнения кода.

**кварги

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

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

Ключи словаря – это имена аргументов, а значение – значения передаваемых функций. Вам даже не нужно это звонить kwargs!

dictionary = {"a": 1, "b": 2}

def someFunction(a, b):
    print(a + b)
    return
    
# these do the same thing:
someFunction(**dictionary)
someFunction(a=1, b=2)

Это полезно, когда вы хотите написать функции, которые могут обрабатывать именованные доводы, не определенные заранее.

Перечислите понимание

Одной из моих любимых вещей в программировании на Python есть понимание списка.

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

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

numbers = [1,2,3,4,5,6,7]
evens = [x for x in numbers if x % 2 is 0]
odds = [y for y in numbers if y not in evens]

cities = ['London', 'Dublin', 'Oslo']

def visit(city):
    print("Welcome to "+city)
for city in cities:
    visit(city)

карта

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

x = [1, 2, 3]
y = map(lambda x : x + 1 , x)
# prints out [2,3,4]print(list(y))

В приведенном выше примере map() применяет простую лямбда-функцию к каждому элементу в x. Он возвращает объект карты, который можно превратить в какой-нибудь итеративный объект, например список или кортеж.

газета3к

Если вы еще не видели его, то будьте готовы к тому, что ваш разум удивит газетный модуль Python.

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

У него даже есть некоторые встроенные функции НЛП.

Так что если вы думаете использовать BeautifulSoup или какую-либо другую библиотеку веб-скрейпинга DIY для следующего проекта, сэкономьте свое время и усилия и $ pip install newspaper3k вместо этого.

Перегрузка оператора

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

На самом деле, это простая концепция. Вы когда-нибудь задавались вопросом, почему Python позволяет вам использовать + оператор для добавления чисел, а также для объединения строк? Это перегрузка оператора в действии.

Вы можете определять объекты, использующие стандартные символы оператора Python, по-своему. Это позволяет использовать их в контекстах, касающихся объектов, с которыми вы работаете.

class Thing:
    def __init__(self, value):
        self.__value = value
    def __gt__(self, other):
        return self.__value > other.__value
    def __lt__(self, other):
        return self.__value < other.__value

something = Thing(100)
nothing = Thing(0)

# True
something > nothing

# False
something < nothing

# Error
something + nothing

pprint

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

Вот где входит в действие модуль красивой печати стандартной библиотеки. Это печатает сложные структурированные объекты в легком чтении формате.

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

import requests
import pprint

url="
users = requests.get(url).json()
pprint.pprint(users)

Очередь

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

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

Очереди «Первым пришедшим, первым вышедшим» (или FIFO) позволяют получать объекты в порядке их добавления. Очереди «Последний пришел, первый вышел» (LIFO) дают вам доступ к последним добавленным объектам первым.

Наконец, приоритетные очереди позволяют получать объекты в соответствии с порядком, в котором они отсортированы.

Вот пример того, как использовать очереди для многопоточного программирования в Python.

__repr__

Определяя класс или объект в Python, полезно предоставить «официальный» способ представления этого объекта в виде строки. Например:

>>> file = open('file.txt', 'r')
>>> print(file)
<open file 'file.txt', mode 'r' at 0x10d30aaf0>

Это значительно облегчает настройку кода. Добавьте его к определению класса, как показано ниже:

class someClass:
    def __repr__(self):
        return "<some description here>"
        
someInstance = someClass()

# prints <some description here>
print(someInstance)

ш

Python создает отличный язык сценариев. Иногда использование стандартных библиотек ОС и подпроцессов может быть небольшой головной болью.

Библиотека sh предоставляет отличную альтернативу.

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

import sh
sh.pwd()
sh.mkdir('new_folder')
sh.touch('new_file.txt')
sh.whoami()
sh.echo('This is great!')

Типичные подсказки

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

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

Начиная с Python 3.5, у вас есть возможность предоставлять подсказки типа при определении функций.

def addTwo(x : Int) -> Int:    return x + 2

Вы также можете определить псевдонимы типов:

from typing import List
Vector = List[float]Matrix = List[Vector]
def addMatrix(a : Matrix, b : Matrix) -> Matrix:
    result = []
    for i,row in enumerate(a):
        result_row =[]
        for j, col in enumerate(row):
            result_row += [a[i][j] + b[i][j]]
        result += [result_row]
    return result

x = [[1.0, 0.0], [0.0, 1.0]]
y = [[2.0, 1.0], [0.0, -2.0]]
z = addMatrix(x, y)

Хотя аннотации типа не обязательны, они могут облегчить понимание вашего кода.

Они также позволяют использовать инструменты проверки типов, чтобы отловить эти ошибки TypeErrors перед выполнением. Пожалуй, стоит, если вы работаете над большими проектами!

uuid

Быстрый и простой способ генерировать универсальные уникальные идентификаторы (или «UUID») – это модуль uuid стандартной библиотеки Python.

import uuid

user_id = uuid.uuid4()
print(user_id)

Это создает рандомизированное 128-битное число, которое почти наверняка будет уникальным.

На самом деле существует более 2¹²² возможных UUID, которые можно создать. Это более пяти ундецилий (или 5 000 000 000 000 000 000 000 000 000 000 000 000).

Вероятность найти дубликаты в заданном наборе чрезвычайно низка. Даже с триллионом UUID вероятность существования дубликата гораздо, гораздо меньше, чем один на миллиард.

Достаточно хорошо для двух строк кода.

Виртуальные среды

Это, пожалуй, моя любимая вещь на Python.

Скорее всего, вы одновременно работаете над несколькими проектами Python. К сожалению, иногда два проекта будут полагаться на разные версии одной зависимости. Какие вы устанавливаете в вашей системе?

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

python -m venv my-project
source my-project/bin/activate
pip install all-the-modules 

Теперь вы можете иметь отдельные версии и установки Python, запущенные на одной машине. Отсортировано!

Википедия

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

Модуль wikipedia делает доступ к этому API почти неудобно удобным.

import wikipedia

result = wikipedia.page('freeCodeCamp')
print(result.summary)

for link in result.links:
    print(link)

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

xkcd

Юмор является ключевой особенностью языка Python, ведь он назван в честь британского комедийного скетч-шоу Monty Python’s Flying Circus. Большая часть официальной документации Python ссылается на самые известные эскизы шоу.

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

import antigravity

Никогда не меняйся, Python. Никогда не изменится.

ЯМЛ

YAML означает ‘YAML Ain’t Markup Language’. Это язык форматирования данных и является сверхнабором JSON.

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

Модуль PyYAML позволяет использовать YAML из Python. Установить с помощью:

$ pip install pyyaml

А потом импортируйте в свои проекты:

import yaml

PyYAML позволяет хранить объекты Python любого типа данных, а также экземпляры любых определенных пользователем классов.

молния

Последний трюк для вас, и это действительно круто. Вам когда-нибудь нужно было сформировать словарь из двух списков?

keys = ['a', 'b', 'c']
vals = [1, 2, 3]
zipped = dict(zip(keys, vals))

The zip() встроенная функция принимает ряд итерированных объектов и возвращает список кортежей. Каждый кортеж группирует элементы входных объектов по их позиционному индексу.

Вы также можете «распаковать» объекты, позвонив по телефону *zip() на них.

Спасибо, что прочли!

Итак, у вас есть все, AZ из Python – надеюсь, вы нашли что-то полезное для своего следующего проекта.

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

Пожалуйста, поделитесь любым из ваших любимых приёмов Python, оставив ответ ниже!

Добавить комментарий

Ваш адрес email не будет опубликован.