En A-Z af nyttige Python-tricks

Foto af Almos Bechtold på Unsplash

Python er et af verdens mest populære, efterspurgte programmeringssprog. Dette er af mange grunde:

  • det er let at lære
  • det er super alsidigt
  • det har en enorm vifte af moduler og biblioteker

Jeg bruger Python dagligt som en integreret del af mit job som dataforsker. Undervejs har jeg hentet et par nyttige tricks og tip.

Her har jeg forsøgt at dele nogle af dem i A-Z-format.

De fleste af disse 'tricks' er ting, jeg har brugt eller snublet over i det daglige arbejde. Nogle fandt jeg, mens jeg gennemser Python Standard Library-dokumenter. Et par andre fandt jeg søge gennem PyPi.

Dog kredit, hvor det skyldes - jeg opdagede fire eller fem af dem på awesome-python.com. Dette er en samlet liste over hundreder af interessante Python-værktøjer og moduler. Det er værd at søge efter inspiration!

alle eller enhver

En af de mange grunde til, at Python er et så populært sprog, er fordi det er læsbart og udtryksfuldt.

Det spøges ofte, at Python er 'eksekverbar pseudokode'. Men når du kan skrive kode som denne, er det vanskeligt at argumentere ellers:

x = [Sandt, Sandt, Falsk]
hvis nogen (x):
    print ("Mindst en sand")
hvis alle (x):
    print ("Ikke en falsk")
hvis nogen (x) og ikke alle (x):
    print ("Mindst en sand og en falsk")

bashplotlib

Vil du plotte grafer i konsollen?

$ pip installere bashplotlib

Du kan have grafer i konsollen.

samlinger

Python har nogle gode standarddatatyper, men nogle gange opfører de bare ikke nøjagtigt, hvordan du vil have dem til.

Heldigvis tilbyder Python Standard Library samlingsmodulet. Denne praktiske tilføjelse giver dig yderligere datatyper.

fra samlinger importerer OrderedDict, Counter
# Husker rækkefølgen nøglerne tilføjes!
x = OrderedDict (a = 1, b = 2, c = 3)
# Tæller hyppigheden af ​​hvert tegn
y = Tæller ("Hej verden!")

dir

Har du nogensinde spekuleret på, hvordan du kan se inde i et Python-objekt og se, hvilke egenskaber det har? Selvfølgelig har du det.

Fra kommandolinjen:

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

Dette kan være en virkelig nyttig funktion, når du kører Python interaktivt og til dynamisk at udforske objekter og moduler, du arbejder med.

Læs mere her.

emoji

Ja virkelig.

$ pip installere emoji

Lad ikke som om du ikke vil prøve det ...

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

fra __future__ import

En konsekvens af Pythons popularitet er, at der altid er nye versioner under udvikling. Nye versioner betyder nye funktioner - medmindre din version er forældet.

Frygt dog ikke. Modulet __future__ giver dig mulighed for at importere funktionalitet fra fremtidige versioner af Python. Det er bogstaveligt talt som tidsrejser eller magi eller noget.

fra __future__ import print_function
print ("Hej verden!")

Hvorfor ikke gå i gang med at importere krøllede seler?

geopy

Geografi kan være et udfordrende terræn for programmerere at navigere (ha, en ordspill!). Men geopy-modulet gør det unødigt let.

$ pip installere geopy

Det fungerer ved at abstrahere API'erne for en række forskellige geocoding-tjenester. Det giver dig mulighed for at få et steds fulde gade-adresse, breddegrad, længdegrad og jævn højde.

Der er også en nyttig afstandsklasse. Det beregner afstanden mellem to placeringer i din foretrukne måleenhed.

fra geopy-import GoogleV3
sted = "221b Baker Street, London"
placering = GoogleV3 (). geocode (sted)
print (location.address)
print (location.location)

hvordan gør jeg

Hold fast på et kodningsproblem og kan du ikke huske den løsning, du har set før? Brug for at kontrollere StackOverflow, men vil ikke forlade terminalen?

Derefter har du brug for dette nyttige kommandolinjeværktøj.

$ pip installere howdoi

Stil det, uanset hvilket spørgsmål du har, og det vil gøre sit bedste for at give et svar.

$ howdoi lodret justere css
$ howdoi til loop i java
$ howdoi fortryd forpligter sig i git

Vær dog opmærksom - den skraber kode fra top svar fra StackOverflow. Det giver måske ikke altid de mest nyttige oplysninger ...

$ howdoi exit vim

inspicere

Pythons inspektionsmodul er fantastisk til at forstå, hvad der sker bag kulisserne. Du kan endda kalde dens metoder på sig selv!

Kodeprøven herunder bruger inspect.getsource () til at udskrive sin egen kildekode. Det bruger også inspect.getmodule () til at udskrive det modul, det blev defineret i.

Den sidste kodelinje udskriver sit eget linjenummer.

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

Ud over disse trivielle anvendelser kan inspektionsmodulet naturligvis vise sig nyttigt til at forstå, hvad din kode laver. Du kan også bruge den til at skrive selvdokumenterende kode.

Jedi

Jedi-biblioteket er et autofuldførelses- og kodeanalysebibliotek. Det gør skrivningskoden hurtigere og mere produktiv.

Medmindre du udvikler din egen IDE, vil du sandsynligvis være mest interesseret i at bruge Jedi som et editor-plugin. Heldigvis er der allerede mange tilgængelige!

Du bruger muligvis allerede Jedi. IPython-projektet bruger Jedi til dets automatisk autofuldførelsesfunktion.

** kwargs

Når man lærer et hvilket som helst sprog, er der mange milepæle undervejs. Med Python tæller sandsynligvis forståelsen af ​​den mystiske ** kwargs-syntaks som en.

Dobbeltstjerne foran et ordbogsobjekt giver dig mulighed for at videregive indholdet af den ordbog som navngivne argumenter til en funktion.

Ordbogens taster er argumentnavne, og værdierne er de værdier, der sendes til funktionen. Du behøver ikke engang at kalde det kwargs!

ordbog = {"a": 1, "b": 2}
def someFunction (a, b):
    tryk (a + b)
    Vend tilbage
# disse gør den samme ting:
someFunction (** ordbog)
someFunction (a = 1, b = 2)

Dette er nyttigt, når du vil skrive funktioner, der kan håndtere navngivne argumenter, der ikke er defineret på forhånd.

Liste forståelser

En af mine foretrukne ting ved programmering i Python er dets listeforståelser.

Disse udtryk gør det nemt at skrive meget ren kode, der læser næsten som naturligt sprog.

Du kan læse mere om, hvordan du bruger dem her.

tal = [1,2,3,4,5,6,7]
evens = [x for x i tal, hvis x% 2 er 0]
odds = [y for y i tal hvis y ikke i evens]
byer = ['London', 'Dublin', 'Oslo']
def besøg (by):
    print ("Velkommen til" + by)
til by i byer:
    besøg (by)

kort

Python understøtter funktionel programmering gennem en række indbyggede funktioner. En af de mest nyttige er kort () -funktionen - især i kombination med lambda-funktioner.

x = [1, 2, 3]
y = kort (lambda x: x + 1, x)
# udskriver [2,3,4]
print (liste (y))

I eksemplet ovenfor anvender kort () en simpel lambda-funktion til hvert element i x. Det returnerer et kortobjekt, der kan konverteres til et eller andet iterbart objekt, såsom en liste eller tuple.

newspaper3k

Hvis du ikke allerede har set det, skal du være parat til at få dit sind sprængt af Pythons avismodul.

Det giver dig mulighed for at hente nyhedsartikler og tilknyttede metadata fra en række førende internationale publikationer. Du kan hente billeder, tekst og forfatternavne.

Det har endda en del indbygget NLP-funktionalitet.

Så hvis du tænkte på at bruge BeautifulSoup eller et andet DIY webscraping-bibliotek til dit næste projekt, skal du spare dig selv tid og kræfter og $ pip installere newspaper3k i stedet.

Overbelastning af operatøren

Python giver support til overbelastning af operatører, som er et af disse udtryk, der får dig til at lyde som en legit computervidenskabsmand.

Det er faktisk et enkelt koncept. Har du nogensinde spekuleret på, hvorfor Python lader dig bruge + -operatøren til at tilføje tal og også til at sammenkæde strenge? Det er operatørens overbelastning i handling.

Du kan definere objekter, der bruger Pythons standard operatørsymboler på deres egen specifikke måde. Dette giver dig mulighed for at bruge dem i sammenhænge, ​​der er relevante for de objekter, du arbejder med.

klasse ting:
    def __init __ (self, value):
        selv .__ værdi = værdi
    def __gt __ (selv, anden):
        return selv .__ værdi> anden .__ værdi
    def __lt __ (self, other):
        return self .__ værdi 
noget = Ting (100)
intet = ting (0)
# Rigtigt
noget> intet
# Falsk
noget 
# Fejl
noget + intet

pprint

Pythons standardudskrivningsfunktion gør sit job. Men prøv at udskrive et stort, indlejret objekt, og resultatet er ret grimt.

Her trækker Standardbibliotekets smukke udskrivningsmodul ind. Dette udskriver komplekse strukturerede objekter i et letlæseligt format.

Et must-have for enhver Python-udvikler, der arbejder med ikke-trivielle datastrukturer.

importanmodninger
import aftryk
url = 'https://randomuser.me/api/?results=1'
brugere = request.get (url) .json ()
pprint.pprint (brugerne)

Python understøtter multithreading, og dette letter det ved Standardbibliotekets kømodul.

Dette modul giver dig mulighed for at implementere kødatastrukturer. Dette er datastrukturer, der giver dig mulighed for at tilføje og hente poster i henhold til en bestemt regel.

"Først ind, først ud" (eller FIFO) køer lader dig hente objekter i den rækkefølge, de blev tilføjet. "Sidste ind, først ud" (LIFO) køer giver dig først adgang til de senest tilføjede objekter.

Endelig giver prioritetskøer dig mulighed for at hente objekter i henhold til den rækkefølge, de er sorteret i.

Her er et eksempel på, hvordan man bruger køer til multitrådeprogrammering i Python.

__repr__

Når du definerer en klasse eller et objekt i Python, er det nyttigt at tilvejebringe en 'officiel' måde at repræsentere dette objekt på som en streng. For eksempel:

>>> fil = åben ('fil.txt', 'r')
>>> print (fil)
<åben fil 'file.txt', tilstand 'r' ved 0x10d30aaf0>

Dette gør fejlfindingskoden meget lettere. Føj det til dine klassedefinitioner som nedenfor:

klasse nogleKlasse:
    def __repr __ (selv):
        returner ""
someInstance = someClass ()
# udskrifter 
print (someInstance)

sh

Python laver et fantastisk scriptingsprog. Undertiden kan brug af standard-os- og underprocessbiblioteker være lidt af en hovedpine.

Sh-biblioteket giver et pænt alternativ.

Det giver dig mulighed for at ringe til ethvert program, som om det var en almindelig funktion - nyttig til at automatisere arbejdsgange og opgaver, alt sammen fra Python.

import sh
sh.pwd ()
sh.mkdir (new_folder ')
sh.touch (new_file.txt ')
sh.whoami ()
sh.echo ('Dette er fantastisk!')

Skriv tip

Python er et dynamisk typisk sprog. Du behøver ikke at specificere datatyper, når du definerer variabler, funktioner, klasser osv.

Dette giver mulighed for hurtig udviklingstid. Der er dog få ting, der er mere irriterende end en runtime-fejl forårsaget af et simpelt skriveproblem.

Siden Python 3.5 har du muligheden for at angive typetips, når du definerer funktioner.

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

Du kan også definere type aliaser:

fra at skrive importliste
Vector = Liste [flyde]
Matrix = Liste [vektor]
def addMatrix (a: Matrix, b: Matrix) -> Matrix:
  resultat = []
  for i, række i tæller (a):
    result_row = []
    for j, col i enumerate (række):
      result_row + = [a [i] [j] + b [i] [j]]
    resultat + = [result_row]
  returresultat
x = [[1,0, 0,0], [0,0, 1,0]]
y = [[2,0, 1,0], [0,0, -2,0]]
z = addMatrix (x, y)

Selvom det ikke er obligatorisk, kan du skrive kommentarer, der gør din kode lettere at forstå.

De giver dig også mulighed for at bruge typekontrolværktøjer til at fange disse herreløse TypeErrors før runtime. Sandsynligvis værd, hvis du arbejder på store, komplekse projekter!

UUID

En hurtig og nem måde at generere universelt unikke id'er (eller 'UUID'er') er gennem Python Standardbibliotekets uuid-modul.

importere uuid
user_id = uuid.uuid4 ()
print (user_id)

Dette skaber et randomiseret 128-bit-nummer, der næsten helt sikkert vil være unikt.

Faktisk er der over 2 ² mulige UUID'er, der kan genereres. Det er over fem undekillioner (eller 5.000.000.000.000.000.000.000.000.000.000.000.000.000.000).

Sandsynligheden for at finde duplikater i et givet sæt er ekstremt lav. Selv med en billion UUID'er er sandsynligheden for en eksisterende duplikat meget, meget mindre end en-i-en-milliard.

Temmelig godt til to kodelinjer.

Virtuelle miljøer

Dette er sandsynligvis min favorit Python ting af alle.

Chancerne er, at du arbejder på flere Python-projekter på én gang. Desværre er to projekter undertiden afhængige af forskellige versioner af den samme afhængighed. Hvilken installerer du på dit system?

Heldigvis giver Pythons support til virtuelle miljøer dig det bedste fra begge verdener. Fra kommandolinjen:

python -m venv mit-projekt
kilde til mit projekt / skraldespand / aktiver
pip installere alle-modulerne

Nu kan du have fristående versioner og installationer af Python, der kører på den samme maskine. Sorteret!

wikipedia

Wikipedia har et fantastisk API, der giver brugerne programmatiske adgang til et uovertruffen organ med fuldstændig fri viden og information.

Wikipedia-modulet gør adgang til dette API næsten pinligt praktisk.

import wikipedia
result = wikipedia.page ('freeCodeCamp')
print (result.summary)
for link i result.links:
    print (link)

Ligesom det rigtige sted giver modulet understøttelse af flere sprog, disambiguering af sider, tilfældig sideindhentning og har endda en doneret () -metode.

xKCD

Humor er en nøglefunktion i Python-sproget - det er trods alt opkaldt efter den britiske komedieskits viser Monty Pythons Flying Circus. Meget af Pythons officielle dokumentation refererer til showets mest berømte skitser.

Sans for humor er dog ikke begrænset til dokumenterne. Gå igennem linjen nedenfor:

import antigravitet

Skift aldrig, Python. Skift aldrig.

YAML

YAML står for ‘YAML Ain't Markup Language’. Det er et dataformateringssprog og er et supersæt af JSON.

I modsætning til JSON kan det gemme mere komplekse objekter og henvise til dets egne elementer. Du kan også skrive kommentarer, hvilket gør det specielt velegnet til at skrive konfigurationsfiler.

Med PyYAML-modulet kan du bruge YAML med Python. Installer med:

$ pip installere pyyaml

Og importer derefter til dine projekter:

import yaml

PyYAML giver dig mulighed for at gemme Python-objekter af en hvilken som helst datatype og forekomster af alle brugerdefinerede klasser også.

zip

Et sidste trick for ya, og det er virkelig et fedt. Har du nogensinde brug for at danne en ordbog ud af to lister?

nøgler = ['a', 'b', 'c']
vals = [1, 2, 3]
lynlås = dict (lynlås (nøgler, vals))

Den indbyggede funktion zip () tager et antal iterable objekter og returnerer en liste over tuples. Hver tuple grupperer elementerne i inputobjekterne efter deres positionsindeks.

Du kan også ‘pakke ud’ objekter ved at kalde * zip () på dem.

Tak for at have læst!

Så der har du det, en A-Z af Python-tricks - forhåbentlig har du fundet noget nyttigt til dit næste projekt.

Python er et meget mangfoldigt og veludviklet sprog, så der er helt sikkert mange funktioner, som jeg ikke har fundet rundt om.

Del nogen af ​​dine egne foretrukne Python-tricks ved at give et svar nedenfor!