Python este unul dintre cele mai populare limbaje de programare la cerere din lume. Aceasta este din mai multe motive:
- este ușor de învățat
- este foarte versatil
- are o gamă largă de module și biblioteci
Folosesc Python zilnic ca parte integrantă a muncii mele de cercetător în date. Pe parcurs, am luat câteva trucuri și sfaturi utile.
Aici, am împărtășit unele dintre ele într-un format AZ.
Majoritatea acestor „trucuri” sunt lucruri pe care le-am folosit sau am dat peste mine în timpul muncii mele de zi cu zi. Unele le-am găsit în timpul navigării pe Documente Python Standard Library. Am găsit câteva alte căutări PyPi.
Cu toate acestea, acordați credit acolo unde trebuie – am descoperit patru sau cinci dintre ei la awesome-python.com. Aceasta este o listă organizată cu sute de instrumente și module Python interesante. Merită să navigați pentru inspirație!
toate sau oricare
Unul dintre multele motive pentru care Python este un limbaj atât de popular este faptul că este lizibil și expresiv.
Se glumește adesea că Python este „pseudocod executabil‘. Dar când poți scrie un cod ca acesta, este dificil să argumentezi altfel:
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
Vrei să trasezi grafice în consolă?
$ pip install bashplotlib
Puteți avea grafice în consolă.
colecții
Python are câteva tipuri de date implicite, dar uneori pur și simplu nu se vor comporta exact așa cum ți-ai dori.
Din fericire, Python Standard Library oferă modulul de colecții. Acest supliment util vă oferă mai multe tipuri de date.
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!")
dir
V-ați întrebat vreodată cum puteți privi în interiorul unui obiect Python și a vedea ce atribute are? Desigur că ai.
Din linia de comandă:
>>> dir()
>>> dir("Hello World")
>>> dir(dir)
Aceasta poate fi o caracteristică foarte utilă atunci când rulați Python interactiv și pentru a explora dinamic obiecte și module cu care lucrați.
Citeste mai mult Aici.
emoji
Da, într-adevăr.
$ pip install emoji
Nu te preface că nu o vei încerca …
from emoji import emojize
print(emojize(":thumbs_up:"))
?
din import __future__
O consecință a popularității Python este că există întotdeauna noi versiuni în curs de dezvoltare. Noile versiuni înseamnă funcții noi – cu excepția cazului în care versiunea dvs. este depășită.
Nu vă temeți, totuși. modulul __future__ vă permite să importați funcționalități din versiunile viitoare ale Python. Este literalmente ca o călătorie în timp, sau magie sau ceva de genul.
from __future__ import print_function
print("Hello World!")
De ce să nu încercăm importarea aparatelor dentare?
geopy
Geografia poate fi un teren dificil pentru navigarea programatorilor (ha, un joc de cuvinte!). Dar modulul geopy îl face uimitor de ușor.
$ pip install geopy
Funcționează prin abstractizarea API-urilor unei game de servicii de geocodare diferite. Vă permite să obțineți adresa străzii complete, latitudinea, longitudinea și chiar altitudinea unui loc.
Există, de asemenea, o clasă utilă la distanță. Calculează distanța dintre două locații din unitatea de măsură preferată.
from geopy import GoogleV3
place = "221b Baker Street, London"
location = GoogleV3().geocode(place)
print(location.address)
print(location.location)
howdoi
Blocat pe o problemă de codare și nu-ți amintești acea soluție pe care ai văzut-o înainte? Trebuie să verificați StackOverflow, dar nu doriți să părăsiți terminalul?
Atunci ai nevoie acest util instrument de linie de comandă.
$ pip install howdoi
Puneți-i orice întrebare aveți și va face tot posibilul să vă răspundă.
$ howdoi vertical align css
$ howdoi for loop in java
$ howdoi undo commits in git
Rețineți totuși – răpune codul din răspunsurile de top de la StackOverflow. S-ar putea să nu ofere întotdeauna cele mai utile informații …
$ howdoi exit vim
inspecta
Python’s inspectați modulul este minunat pentru a înțelege ce se întâmplă în culise. Puteți apela chiar la metodele sale!
Eșantionul de cod de mai jos folosește inspect.getsource()
pentru a imprima propriul cod sursă. De asemenea, folosește inspect.getmodule()
pentru a imprima modulul în care a fost definit.
Ultima linie de cod imprimă propriul număr de linie.
import inspect
print(inspect.getsource(inspect.getsource))
print(inspect.getmodule(inspect.getmodule))
print(inspect.currentframe().f_lineno)
Desigur, dincolo de aceste utilizări banale, modulul de inspecție se poate dovedi util pentru a înțelege ce face codul dvs. De asemenea, îl puteți utiliza pentru scrierea codului de auto-documentare.
Jedi
Biblioteca Jedi este o bibliotecă de completare automată și analiză de cod. Scrie codul mai rapid și mai productiv.
Dacă nu vă dezvoltați propriul IDE, probabil că vă va interesa cel mai mult folosind Jedi ca plugin de editor. Din fericire, sunt deja încărcături disponibile!
Cu toate acestea, este posibil să utilizați deja Jedi. Proiectul IPython folosește Jedi pentru funcționalitatea sa de completare automată a codului.
** kwargs
Când înveți orice limbă, există multe etape importante pe parcurs. Cu Python, înțelegerea misteriosului **kwargs
sintaxa contează probabil ca una.
Asteriscul dublu din fața unui obiect de dicționar vă permite să treceți conținutul acelui dicționar ca numite argumente pentru o funcție.
Cheile dicționarului sunt numele argumentelor, iar valorile sunt valorile transmise funcției. Nici nu trebuie să-l suni 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)
Acest lucru este util atunci când doriți să scrieți funcții care pot gestiona argumente numite care nu sunt definite în prealabil.
Înțelegeri de listă
Unul dintre lucrurile mele preferate despre programarea în Python sunt înțelegeri de listă.
Aceste expresii facilitează scrierea unui cod foarte curat care citește aproape ca un limbaj natural.
Puteți citi mai multe despre cum să le folosiți Aici.
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)
Hartă
Python acceptă programarea funcțională printr-o serie de funcții încorporate. Unul dintre cele mai utile este map()
funcție – mai ales în combinație cu funcții lambda.
x = [1, 2, 3]
y = map(lambda x : x + 1 , x)
# prints out [2,3,4]print(list(y))
În exemplul de mai sus, map()
aplică o funcție lambda simplă fiecărui element din x
. Returnează un obiect hartă, care poate fi convertit în un obiect iterabil, cum ar fi o listă sau un tuplu.
ziar3k
Dacă nu l-ați văzut deja, atunci fiți pregătiți să vă loviți mintea Modulul ziarului Python.
Vă permite să preluați articole de știri și meta-date asociate dintr-o serie de publicații internaționale de top. Puteți prelua imagini, text și nume de autori.
Are chiar și unele funcționalitate NLP încorporată.
Deci, dacă v-ați gândit să folosiți BeautifulSoup sau o altă bibliotecă DIY webscraping pentru următorul dvs. proiect, economisiți-vă timp și efort și $ pip install newspaper3k
in schimb.
Suprasolicitarea operatorului
Python oferă suport pentru supraîncărcarea operatorului, care este unul dintre acei termeni care te fac să pară un informatic legitim.
Este de fapt un concept simplu. M-am întrebat vreodată de ce Python vă permite să utilizați +
operator pentru a adăuga numere și, de asemenea, pentru a concatena șiruri? Aceasta este supraîncărcarea operatorului în acțiune.
Puteți defini obiecte care utilizează simbolurile standard ale operatorului Python în modul lor specific. Acest lucru vă permite să le utilizați în contexte relevante pentru obiectele cu care lucrați.
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
Implicit Python print
funcția își face treaba. Dar încercați să imprimați orice obiect mare, cuibărit, iar rezultatul este destul de urât.
Iată unde Modulul destul de tipărit al bibliotecii standard pași în. Aceasta imprimă obiecte complexe structurate într-un format ușor de citit.
Un must-have pentru orice dezvoltator Python care lucrează cu structuri de date non-banale.
import requests
import pprint
url="https://randomuser.me/api/?results=1"
users = requests.get(url).json()
pprint.pprint(users)
Coadă
Python acceptă multithreading, iar acest lucru este facilitat de modulul Queue al bibliotecii standard.
Acest modul vă permite să implementați structuri de date în coadă. Acestea sunt structuri de date care vă permit să adăugați și să preluați intrări conform unei reguli specifice.
Cozile „First in, first out” (sau FIFO) vă permit să extrageți obiecte în ordinea în care au fost adăugate. Cozile „Last in, first out” (LIFO) vă permit să accesați mai întâi cele mai recente obiecte adăugate.
În cele din urmă, cozile prioritare vă permit să extrageți obiecte în funcție de ordinea în care sunt sortate.
Iată un exemplu de utilizare a cozilor pentru programare multithread în Python.
__repr__
Când definiți o clasă sau un obiect în Python, este util să furnizați un mod „oficial” de a reprezenta acel obiect ca un șir. De exemplu:
>>> file = open('file.txt', 'r')
>>> print(file)
<open file 'file.txt', mode 'r' at 0x10d30aaf0>
Acest lucru facilitează mult depanarea codului. Adăugați-l la definițiile clasei dvs. după cum urmează:
class someClass:
def __repr__(self):
return "<some description here>"
someInstance = someClass()
# prints <some description here>
print(someInstance)
SH
Python creează un limbaj de scriptare excelent. Uneori, utilizarea bibliotecilor standard de sisteme de operare și subproces poate fi o durere de cap.
biblioteca sh oferă o alternativă îngrijită.
Vă permite să apelați orice program ca și cum ar fi o funcție obișnuită – utilă pentru automatizarea fluxurilor de lucru și a sarcinilor, toate din Python.
import sh
sh.pwd()
sh.mkdir('new_folder')
sh.touch('new_file.txt')
sh.whoami()
sh.echo('This is great!')
Tastați indicii
Python este un limbaj dinamic. Nu trebuie să specificați tipuri de date atunci când definiți variabile, funcții, clase etc.
Acest lucru permite timpii de dezvoltare rapidă. Cu toate acestea, există puține lucruri mai enervante decât o eroare de rulare cauzată de o simplă problemă de tastare.
Din moment ce Python 3.5, aveți opțiunea de a furniza sugestii de tip la definirea funcțiilor.
def addTwo(x : Int) -> Int: return x + 2
De asemenea, puteți defini aliasuri de tip:
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)
Deși nu sunt obligatorii, adnotările de tip vă pot ușura înțelegerea codului.
De asemenea, vă permit să utilizați instrumente de verificare a tipurilor pentru a prinde acele TypeErrors rătăcite înainte de runtime. Probabil merită dacă lucrați la proiecte mari și complexe!
uuid
O modalitate rapidă și ușoară de a genera ID-uri unice universale (sau „UUID-uri”) este prin Modulul uuid al Python Standard Library.
import uuid
user_id = uuid.uuid4()
print(user_id)
Acest lucru creează un număr randomizat pe 128 de biți, care va fi aproape sigur unic.
De fapt, există peste 2¹²² UUID-uri posibile care pot fi generate. Asta înseamnă peste cinci undecilioane (sau 5.000.000.000.000.000.000.000.000.000.000.000.000.000).
Probabilitatea de a găsi duplicate într-un set dat este extrem de redusă. Chiar și cu un trilion de UUID-uri, probabilitatea existenței unui duplicat este mult, mult mai mică decât un milion.
Destul de bun pentru două linii de cod.
Medii virtuale
Acesta este probabil lucrul meu preferat de Python dintre toate.
Sunt șanse să lucrați la mai multe proiecte Python în același timp. Din păcate, uneori două proiecte se vor baza pe versiuni diferite ale aceleiași dependențe. Ce instalați pe sistemul dvs.?
Din fericire, Python’s suport pentru medii virtuale vă permite să aveți tot ce este mai bun din ambele lumi. Din linia de comandă:
python -m venv my-project
source my-project/bin/activate
pip install all-the-modules
Acum puteți avea versiuni și instalări independente de Python care rulează pe aceeași mașină. Sortate!
wikipedia
Wikipedia are un API excelent care permite utilizatorilor acces programatic la un corp de neegalat de cunoștințe și informații complet gratuite.
modul Wikipedia face ca accesarea acestui API să fie aproape jenant de convenabilă.
import wikipedia
result = wikipedia.page('Routech')
print(result.summary)
for link in result.links:
print(link)
La fel ca site-ul real, modulul oferă suport pentru mai multe limbi, dezambiguizarea paginii, regăsirea aleatorie a paginilor și chiar are o donate()
metodă.
xkcd
Umorul este o caracteristică cheie a limbajului Python – la urma urmei, este numit după spectacolul de schițe britanic de comedie Circul zburător al lui Monty Python. O mare parte din documentația oficială a Python face referire la cele mai faimoase schițe ale spectacolului.
Totuși, simțul umorului nu este limitat la documente. Încercați să rulați mai jos:
import antigravity
Nu te schimba niciodată, Python. Nu se schimbă niciodată.
YAML
YAML înseamnă „YAML Ain’t Markup Language‘. Este un limbaj de formatare a datelor și este un superset al JSON.
Spre deosebire de JSON, poate stoca obiecte mai complexe și se poate referi la propriile elemente. De asemenea, puteți scrie comentarii, făcându-l deosebit de potrivit pentru scrierea fișierelor de configurare.
Modul PyYAML vă permite să utilizați YAML cu Python. Instalați cu:
$ pip install pyyaml
Și apoi importați în proiectele dvs.:
import yaml
PyYAML vă permite să stocați obiecte Python de orice tip de date și instanțe ale oricăror clase definite de utilizator.
fermoar
Un ultim truc pentru tine, și chiar este unul grozav. Ați avut vreodată nevoie să formați un dicționar din două liste?
keys = ['a', 'b', 'c']
vals = [1, 2, 3]
zipped = dict(zip(keys, vals))
zip()
funcția încorporată preia un număr de obiecte iterabile și returnează o listă de tupluri. Fiecare tuplu grupează elementele obiectelor de intrare după indexul lor de poziție.
De asemenea, puteți „dezarhiva” obiectele apelând *zip()
pe ei.
Mulțumesc pentru lectură!
Deci, iată-l, un AZ de trucuri Python – sperăm că ați găsit ceva util pentru următorul dvs. proiect.
Python este un limbaj foarte variat și bine dezvoltat, așa că este obligatoriu să existe multe caracteristici pe care nu le-am inclus.
Vă rugăm să împărtășiți oricare dintre trucurile dvs. preferate de Python lăsând un răspuns mai jos!