A-Z от полезни трикове на Python

Снимка на Алмос Бехтолд на Unsplash

Python е един от най-популярните в света езици за програмиране. Това е по много причини:

  • лесно е да се научиш
  • супер е многофункционален
  • разполага с огромна гама от модули и библиотеки

Използвам Python ежедневно като неразделна част от работата ми като учен с данни. По пътя си подбрах няколко полезни трика и съвета.

Ето, направих опит да споделя някои от тях във формат A-Z.

Повечето от тези трикове са неща, които съм използвал или препъвал по време на ежедневната си работа. Някои намерих, докато разглеждах документите на стандартната библиотека Python. Няколко други намерих търсене чрез PyPi.

Въпреки това, кредит, когато се дължи - открих четири или пет от тях в awesome-python.com. Това е куриран списък от стотици интересни Python инструменти и модули. Струва си да търсите за вдъхновение!

всички или всякакви

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

Често се шегуват, че Python е „изпълним псевдокод“. Но когато можете да напишете код като този, е трудно да се аргументира друго:

x = [Истина, вярно, невярно]
ако има (x):
    печат („Поне една вярна“)
ако всички (x):
    print ("Не е едно невярно")
ако има (x) и не всички (x):
    печат ("Поне едно вярно и едно невярно")

bashplotlib

Искате да начертаете графики в конзолата?

$ pip инсталиране bashplotlib

Можете да имате графики в конзолата.

колекции

Python има някои страхотни типове данни по подразбиране, но понякога те просто няма да се държат точно както искате.

За щастие, стандартната библиотека Python предлага модула за колекции. Тази удобна добавка ви предоставя допълнителни типове данни.

от колекции импортиране OrрадDict, Counter
# Спомня си поръчката ключовете са добавени!
x = OrdersDict (a = 1, b = 2, c = 3)
# Отчита честотата на всеки знак
y = Counter ("Здравей, свят!")

реж

Някога сте се чудили как можете да погледнете вътре в Python обект и да видите какви атрибути има? Разбира се, че имате.

От командния ред:

>>> dir ()
>>> dir ("Здравей, свят")
>>> dir (dir)

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

Прочетете повече тук.

емотикон

Да наистина.

$ pip инсталиране на емоджи

Не се преструвайте, че няма да го изпробвате ...

от импортиране на емоджи
печат (emojize ( ": thumbs_up:"))

от __future__ импортиране

Едно от последствията от популярността на Python е, че винаги се разработват нови версии. Новите версии означават нови функции - освен ако вашата версия не е остаряла.

Не се страхувайте обаче. Модулът __future__ ви позволява да импортирате функционалност от бъдещи версии на Python. Буквално е като пътуване във времето, или магия, или нещо подобно.

от __future__ import print_function
печат ("Здравей свят!")

Защо да не отидете да импортирате къдрави брекети?

geopy

Географията може да бъде труден терен за програмистите да се ориентират (ха, каламбур!). Но модулът за геопиране го прави несигурно лесен.

$ pip инсталирайте geopy

Той работи, като абстрахира API-тата на редица различни услуги за геокодиране. Тя ви позволява да получите пълния адрес на улицата, географската ширина, дължина и дори надморска височина.

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

от геопортиране импортиране GoogleV3
place = "221b Бейкър Стрийт, Лондон"
location = GoogleV3 (). геокод (място)
печат (location.address)
печат (location.location)

как мога

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

Тогава се нуждаете от този полезен инструмент за команден ред.

$ pip инсталирайте howdoi

Задайте го какъвто и да е въпросът ви и ще направите всичко възможно да върнете отговор.

$ howdoi вертикално подравняване на css
$ howdoi за контур в Java
$ howdoi отмяна извършва в git

Имайте предвид обаче - той изтрива код от най-добрите отговори от StackOverflow. Не винаги може да даде най-полезната информация ...

$ howdoi изход vim

инспектира

Модулът за проверка на Python е чудесен за разбиране на случващото се зад кулисите. Можете дори да се обадите на неговите методи върху себе си!

Кодовата извадка по-долу използва inspect.getsource () за отпечатване на собствен изходен код. Той също така използва inspect.getmodule () за отпечатване на модула, в който е определен.

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

внос инспекция
печат (inspect.getsource (inspect.getsource))
печат (inspect.getmodule (inspect.getmodule))
печат (inspect.currentframe (). f_lineno)

Разбира се, извън тези тривиални приложения, модулът за проверка може да се окаже полезен за разбиране какво прави вашият код. Можете да го използвате и за писане на код за самодокументиране.

Jedi

Библиотеката на джедаите е библиотека за автоматично довършване и анализ на кодове. Това прави писането на код по-бързо и по-продуктивно.

Освен ако не разработвате свой собствен IDE, вероятно ще бъдете най-заинтересовани да използвате Jedi като плъгин за редактор. За щастие вече има налични товари!

Вероятно обаче използвате джедаите. Проектът IPython използва Jedi за неговата функционалност за автоматично довършване на кода.

** kwargs

Когато изучавате какъвто и да е език, по пътя има много основни етапи. При Python разбирането на тайнствения синтаксис ** kwargs вероятно се счита за едно цяло.

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

Ключовете на речника са имената на аргументите, а стойностите са стойностите, предадени на функцията. Не е нужно дори да го наричате kwargs!

Dictionary = {"a": 1, "b": 2}
дефинирайте някоиФункция (a, b):
    печат (a + b)
    връщане
# те правят същото:
someFunction (** речник)
някоифункция (a = 1, b = 2)

Това е полезно, когато искате да напишете функции, които могат да обработват именани аргументи, които не са дефинирани предварително.

Избройте разбиранията

Едно от любимите ми неща за програмирането в Python са неговите разбирания в списъка.

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

Можете да прочетете повече за това как да ги използвате тук.

числа = [1,2,3,4,5,6,7]
evens = [x за x в числа, ако x% 2 е 0]
odds = [y за y в числа, ако y не в evens]
градове = ['Лондон', 'Дъблин', 'Осло']
def посещение (град):
    печат ("Добре дошли в" + град)
за град в градове:
    посещение (град)

карта

Python поддържа функционално програмиране чрез редица вградени функции. Една от най-полезните е функцията map () - особено в комбинация с ламбда функции.

x = [1, 2, 3]
y = карта (lambda x: x + 1, x)
# разпечатки [2,3,4]
печат (списък (Y))

В горния пример map () прилага проста ламбда функция към всеки елемент в x. Той връща обект на карта, който може да бъде преобразуван в някакъв итерабелен обект, като списък или кортеж.

newspaper3k

Ако още не сте го виждали, бъдете готови да раздуете ума си от модула за вестници на Python.

Той ви позволява да изтегляте новинарски статии и свързани метаданни от редица водещи международни публикации. Можете да извлечете изображения, имена на текст и автори.

Той дори има вградена NLP функционалност.

Така че, ако сте мислили да използвате BeautifulSoup или някоя друга библиотека за DIY в уебсайтове за следващия си проект, спестете си време и усилия и вместо $ pip инсталирайте вестник3k.

Претоварване на оператора

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

Това всъщност е проста концепция. Някога се питах защо Python ви позволява да използвате оператора + за добавяне на числа, а също и за свързване на низове? Това е оператор претоварване в действие.

Можете да дефинирате обекти, които използват стандартните символи на оператора на Python по свой специфичен начин. Това ви позволява да ги използвате в контексти, подходящи за обектите, с които работите.

клас нещо:
    def __init __ (самостоятелно, стойност):
        self .__ value = стойност
    def __gt __ (самостоятелно, друго):
        върнете себе .__ стойност> друго .__ стойност
    def __lt __ (самостоятелно, друго):
        върнете себе .__ стойност <друга .__ стойност
нещо = нещо (100)
нищо = нещо (0)
# Вярно
нещо> нищо
# Неверни
нещо <нищо
# Грешка
нещо + нищо

pprint

Функцията за печат по подразбиране на Python върши своята работа. Но опитайте да отпечатате всеки голям, вложен обект и резултатът е доста грозен.

Ето къде влиза модулът за хубаво отпечатване на Стандартната библиотека. Това отпечатва сложни структурирани обекти в лесен за четене формат.

Задължително за всеки разработчик на Python, който работи с нетривиални структури от данни.

заявки за импортиране
импортиране на отпечатък
url = 'https://randomuser.me/api/?results=1'
users = questions.get (url) .json ()
pprint.pprint (потребители)

Опашка

Python поддържа многопоточност и това се улеснява от модула на опашката на Стандартната библиотека.

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

Опашки „Първо, първо навън“ (или FIFO) ви позволяват да извличате обекти в реда, в който са били добавени. Опашките „Последно, първо навън“ (LIFO) ви позволяват първо да получите достъп до най-скоро добавените обекти.

Накрая, приоритетните опашки ви позволяват да извличате обекти според реда, в който са сортирани.

Ето пример за това как да използвате опашки за многопоточно програмиране в Python.

__repr__

Когато дефинирате клас или обект в Python, е полезно да предоставите „официален“ начин за представяне на този обект като низ. Например:

>>> файл = отворен ('file.txt', 'r')
>>> печат (файл)
<отворен файл 'file.txt', режим 'r' в 0x10d30aaf0>

Това прави кода за отстраняване на грешки много по-лесен. Добавете го към определенията на вашия клас, както е посочено по-долу:

клас някоиклас:
    def __repr __ (самостоятелно):
        върнете "<някакво описание тук>"
someInstance = someClass ()
# разпечатки <някакво описание тук>
печат (someInstance)

од

Python прави страхотен скриптов език. Понякога използването на стандартните библиотеки на ос и подпроцес може да бъде малко главоболие.

Sh библиотеката предлага чиста алтернатива.

Тя ви позволява да извиквате всяка програма, сякаш е обикновена функция - полезна за автоматизиране на работните процеси и задачи, всички от Python.

внос ш
sh.pwd ()
sh.mkdir ( "new_folder)
sh.touch ( "new_file.txt)
sh.whoami ()
sh.echo („Това е страхотно!“)

Тип намеци

Python е динамично въведен език. Не е необходимо да посочвате типове данни, когато дефинирате променливи, функции, класове и т.н.

Това дава възможност за бързи времена на развитие. Въпреки това, има няколко неща, по-досадни от грешка по време на изпълнение, причинена от прост проблем с въвеждането.

Тъй като Python 3.5, имате възможност да предоставите подсказки за типа при дефиниране на функции.

def addTwo (x: Int) -> Int:
    връщане x + 2

Можете също така да определите псевдоними тип:

от въвеждане на Списък за импортиране
Vector = Списък [float]
Матрица = Списък [Вектор]
def addMatrix (a: Матрица, b: Матрица) -> Матрица:
  резултат = []
  за i, ред в изброяване (a):
    result_row = []
    за j, col в изброяване (ред):
      result_row + = [a [i] [j] + b [i] [j]]
    резултат + = [резултат_роу]
  възвратен резултат
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 ()
печат (user_id)

Това създава рандомизирано 128-битово число, което почти сигурно ще бъде уникално.

Всъщност има над 2 × 2 възможни UUID, които могат да бъдат генерирани. Това е над пет undecillion (или 5,000,000,000,000,000,000,000,000,000,000,000).

Вероятността да намерите дубликати в даден набор е изключително ниска. Дори при трилион UUID, вероятността за дублиране на съществуващите е много, много по-малка от един на милиард.

Доста добър за два реда код.

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

Това вероятно е любимото ми Python нещо от всички.

Вероятно работите върху множество Python проекти по едно и също време. За съжаление, понякога два проекта ще разчитат на различни версии на една и съща зависимост. Кои инсталирате в системата си?

За щастие, поддръжката на Python за виртуални среди ви позволява да имате най-доброто от двата свята. От командния ред:

python -m venv my-project
източник my-project / bin / activate
pip инсталирайте всички модули

Сега можете да имате самостоятелни версии и инсталации на Python, работещи на една и съща машина. Сортирани!

Уикипедия

Уикипедия има страхотен API, който позволява на потребителите програмен достъп до ненадминат корпус от напълно безплатни знания и информация.

Модулът на уикипедия прави достъпът до този API почти неудобно удобен.

импортиране на уикипедия
резултат = wikipedia.page ('freeCodeCamp')
печат (result.summary)
за връзка в result.links:
    печат (линк)

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

xkcd

Хуморът е ключова характеристика на езика на Python - в края на краищата той е кръстен на британското комедийно скечово шоу „Летящ цирк на Монти Пайтън“. Голяма част от официалната документация на Python се позовава на най-известните скици на шоуто.

Чувството за хумор обаче не е ограничено само до документите. Изпълнете линията по-долу:

вносна антигравитация

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

YAML

YAML означава „YAML Aint Markup Language“. Това е език за форматиране на данни и е суперсет от JSON.

За разлика от JSON, той може да съхранява по-сложни обекти и да се отнася до собствените си елементи. Можете също да пишете коментари, което е особено подходящо за писане на конфигурационни файлове.

PyYAML модулът ви позволява да използвате YAML с Python. Инсталиране с:

$ pip инсталирате pyyaml

И след това импортирайте във вашите проекти:

внос ямл

PyYAML ви позволява да съхранявате Python обекти от всякакъв тип данни и също така копия на определени от потребителя класове.

цип

Последен трик за теб и наистина е готин. Имало ли ви е някога необходимо за формиране на речник от два списъка?

клавиши = ['a', 'b', 'c']
vals = [1, 2, 3]
zipped = dict (цип (ключове, vals))

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

Можете също да „разархивирате“ обекти, като се обадите на * zip () върху тях.

Благодаря за четенето!

Така че, има го, A-Z от трикове на Python - да се надяваме, че сте намерили нещо полезно за следващия си проект.

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

Моля, споделете някой от любимите си трикове на Python, като оставите отговор по-долу!