A-Z hyödyllisiä Python-temppuja

Kuva Almos Bechtold on Unsplash

Python on yksi maailman suosituimmista kysynnän mukaisista ohjelmointikieleistä. Tämä johtuu monista syistä:

  • se on helppo oppia
  • se on erittäin monipuolinen
  • sillä on valtava valikoima moduuleja ja kirjastoja

Käytän Pythonia päivittäin olennaisena osana tietotekniikan työtä. Matkan varrella olen poiminut muutamia hyödyllisiä temppuja ja vinkkejä.

Tässä olen yrittänyt jakaa joitain niistä A-Z-muodossa.

Suurin osa näistä "temppuista" on asioita, joita olen käyttänyt tai kompastellut päivittäisessä työssäni. Jotkut löysin selaamalla Python Standard Library -asiakirjoja. Muutama muutama löysin hakuja PyPi: n kautta.

Luotto kuitenkin silloin, kun se johtuu - löysin heistä neljä tai viisi osoitteessa awesome-python.com. Tämä on kuratoitu luettelo satoista mielenkiintoisista Python-työkaluista ja moduuleista. Se kannattaa selata inspiraatiota!

kaikki tai kaikki

Yksi monista syistä, miksi Python on niin suosittu kieli, on se, että se on luettavissa ja ilmeikäs.

Usein vitsaillaan, että Python on 'suoritettava pseudokoodi'. Mutta kun voit kirjoittaa tämänkaltaisen koodin, on vaikea väittää toisin:

x = [totta, totta, vääriä]
jos on (x):
    tulosta ("Ainakin yksi totta")
jos kaikki (x):
    tulosta ("Ei yksi väärä")
jos on (x) eikä kaikkia (x):
    tulosta ("Ainakin yksi tosi ja yksi väärä")

bashplotlib

Haluatko piirtää kaavioita konsoliin?

$ pip asentaa bashplotlib

Konsolissa voi olla kuvaajia.

kokoelmat

Pythonilla on hienoja oletustietotyyppejä, mutta joskus ne eivät vain käyttäytyy tarkalleen kuten haluat.

Onneksi Python Standard Library tarjoaa kokoelmoduulin. Tämä kätevä lisäosa tarjoaa sinulle muita tietotyyppejä.

kokoelmista tuo OrdedDict, Counter
# Muistaa järjestyksen, jossa avaimet lisätään!
x = OrdedDict (a = 1, b = 2, c = 3)
# Laskee kunkin merkin taajuuden
y = laskuri ("Hei maailma!")

dir

Oletko koskaan miettinyt, kuinka voit katsoa Python-objektin sisälle ja nähdä mitä ominaisuuksia sillä on? Totta kai sinulla on.

Komentoriviltä:

>>> dir ()
>>> dir ("Hei maailma")
>>> dir (rež)

Tämä voi olla todella hyödyllinen ominaisuus, kun python-ohjelmaa käytetään vuorovaikutteisesti ja tutkiessasi työskenteleviä objekteja ja moduuleja dynaamisesti.

Lue lisää täältä.

emoji

Kyllä todella.

$ pip asentaa hymiöt

Älä teeskentele, ettet aio kokeilla sitä ...

alkaen emoji tuo emojize
Tulosta (emojize ( ": thumbs_up:"))

tuonnista __future__

Yksi seuraus Pythonin suosiosta on, että kehitteillä on aina uusia versioita. Uudet versiot tarkoittavat uusia ominaisuuksia - paitsi jos versio on vanhentunut.

Älä kuitenkaan pelkää. __Future__-moduulin avulla voit tuoda toimintoja Pythonin tulevista versioista. Se on kirjaimellisesti aikamatkaa tai taikuutta tai jotain.

from __future__ import print_function
tulosta ("Hei maailma!")

Miksi et halua tuoda kiharanauhoja?

geopy

Maantiede voi olla ohjelmoijille suunnattu navigointi haastava maasto (ha, pun!). Mutta geopy-moduuli tekee siitä uskomattoman helpon.

$ pip asentaa geopy

Se toimii abstrahimalla useiden eri geokoodauspalveluiden sovellusliittymät. Sen avulla voit saada paikan täydellisen katuosoitteen, leveyden, pituuden ja jopa korkeuden.

Siellä on myös hyödyllinen etäisyysluokka. Se laskee suosikkimittayksikkösi kahden sijainnin välisen etäisyyden.

geopy-tuonnista GoogleV3
paikka = "221b Baker Street, Lontoo"
sijainti = GoogleV3 (). geokoodi (paikka)
Tulosta (location.address)
Tulosta (location.location)

Miten

Pidätkö koodausongelmasta etkö pysty muistamaan aiemmin näkemääsi ratkaisua? Pitäisikö tarkistaa StackOverflow, mutta et halua poistua terminaalista?

Tarvitset sitten tämän hyödyllisen komentorivityökalun.

$ pip asentaa Howdoi

Kysy mistä tahansa kysymyksestäsi, ja se tekee parhaansa palauttaaksesi vastauksen.

$ howdoi pystysuunnassa css
$ howdoi javaa varten
$ howdoi undo tekee sitoumuksen

Ole kuitenkin tietoinen - se kaavii koodia StackOverflow-vastauksen parhaista vastauksista. Se ei välttämättä aina anna kaikkein hyödyllisiä tietoja ...

$ howdoi poistu vim

tarkastaa

Pythonin tarkastusmoduuli on hyvä ymmärtämään, mitä kulissien takana tapahtuu. Voit jopa kutsua sen menetelmiä itseensä!

Alla oleva koodinäyte tulostaa oman lähdekoodin inspect.getsource (): lla. Se käyttää myös tarkistaa.getmodule () tulostaa moduuli, jossa se määritettiin.

Viimeinen koodirivi tulostaa oman rivinumeron.

tuo tarkastus
Tulosta (inspect.getsource (inspect.getsource))
Tulosta (inspect.getmodule (inspect.getmodule))
Tulosta (inspect.currentframe (). f_lineno)

Tietysti näiden triviaalien käyttötarkoitusten lisäksi tarkistusmoduuli voi osoittautua hyödylliseksi ymmärtääksesi, mitä koodisi tekee. Voit käyttää sitä myös itse dokumentoivan koodin kirjoittamiseen.

Jedi

Jedi-kirjasto on automaattisen täydennyksen ja koodianalyysikirjasto. Se tekee koodin kirjoittamisesta nopeampaa ja tuottavampaa.

Ellet kehitä omaa IDE: tä, olet todennäköisesti eniten kiinnostunut Jedin käyttämisestä editorin laajennuksena. Onneksi kuormia on jo saatavana!

Saatat jo käyttää Jediä. IPython-projekti hyödyntää Jediä koodin automaattisen täydentämisen toiminnoissa.

** kwargs

Kun opit mitä tahansa kieltä, matkalla on monia virstanpylväitä. Pythonin avulla salaperäisen ** kwargs-syntaksin ymmärtäminen lasketaan todennäköisesti yhdeksi.

Kaksinkertainen tähti sanakirjaobjektin edessä antaa sinun siirtää sanakirjan sisältö nimeltään argumentteina toiminnolle.

Sanakirjan näppäimet ovat argumentin nimiä, ja arvot ovat funktiolle siirrettyjä arvoja. Sinun ei tarvitse edes kutsua sitä kwargiksi!

sanakirja = {"a": 1, "b": 2}
def someFunction (a, b):
    tulosta (a + b)
    palata
# nämä tekevät saman asian:
someFunction (** sanakirja)
jokin toiminto (a = 1, b = 2)

Tämä on hyödyllistä, kun haluat kirjoittaa toimintoja, jotka käsittelevät nimettyjä argumentteja, joita ei ole etukäteen määritelty.

Lista ymmärrykset

Yksi suosikkiasioistani ohjelmoinnissa Pythonissa on sen luettelon ymmärtäminen.

Näiden lausekkeiden avulla on helppo kirjoittaa erittäin puhdas koodi, joka lukee melkein kuin luonnollinen kieli.

Voit lukea lisää niiden käytöstä täältä.

luvut = [1,2,3,4,5,6,7]
parillinen = [x x: lle numeroina, jos x% 2 on 0]
kertoimet = [y y: lle numeroina, jos y ei parillisesti]
kaupungit = ['Lontoo', 'Dublin', 'Oslo']
def vierailu (kaupunki):
    tulosta ("tervetuloa" + kaupunki)
kaupunkien kaupungeissa:
    käynti (kaupunki)

kartta

Python tukee toiminnallista ohjelmointia monien sisäänrakennettujen ominaisuuksien avulla. Yksi hyödyllisimmistä on kartta () -toiminto - etenkin yhdessä lambda-toimintojen kanssa.

x = [1, 2, 3]
y = kartta (lambda x: x + 1, x)
# tulostaa [2,3,4]
Tulosta (lista (y))

Yllä olevassa esimerkissä kartta () käyttää yksinkertaista lambda-funktiota jokaisessa elementissä x: ssä. Se palauttaa karttaobjektin, joka voidaan muuntaa osaksi toistettavissa olevaa objektia, kuten luetteloa tai tuplea.

newspaper3k

Jos et ole vielä nähnyt sitä, niin ole valmis siihen, että ajatuksesi puhalletaan Pythonin sanomalehden avulla.

Sen avulla voit noutaa uutisartikkeleita ja niihin liittyviä metatietoja useista johtavista kansainvälisistä julkaisuista. Voit hakea kuvia, tekstiä ja kirjoittajien nimiä.

Siinä on jopa joitain sisäänrakennettuja NLP-toimintoja.

Joten jos olet ajatellut käyttää BeautifulSoupia tai jotain muuta DIY-verkkorahoituskirjastoa seuraavassa projektissasi, säästä aikaa ja vaivaa ja $ pip asentaa newspaper3k sen sijaan.

Operaattorin ylikuormitus

Python tarjoaa tukea operaattorien ylikuormitukselle, joka on yksi niistä ehdoista, jotka saavat sinut kuulostamaan lailliselta tietoteknikolta.

Se on itse asiassa yksinkertainen käsite. Oletko koskaan miettinyt, miksi Python antaa sinun + -operaattorin avulla lisätä numeroita ja myös yhdistää merkkijonoja? Se on operaattorin ylikuormitusta toiminnassa.

Voit määrittää objektit, jotka käyttävät Pythonin vakiooperaattorisymboleja omalla tavallaan. Tämän avulla voit käyttää niitä konteksteissa, jotka koskevat työskentelemiäsi kohteita.

luokan asia:
    def __init __ (itse, arvo):
        itse .__ arvo = arvo
    def __gt __ (itse, muu):
        palauta itse .__ arvo> muu .__ arvo
    def __lt __ (itse, muu):
        palauta itse .__ arvo 
jotain = asia (100)
ei mitään = asia (0)
# Totta
jotain> ei mitään
# Väärä
jotain 
# Virhe
jotain + ei mitään

pprint

Pythonin oletus tulostustoiminto tekee työnsä. Kokeile tulostaa kaikki suuret sisäkkäiset esineet, ja tulos on melko ruma.

Tässä on Standard-kirjaston melko tulostetun moduulin askel. Tämä tulostaa monimutkaiset jäsennellyt objektit helposti luettavassa muodossa.

Pakollinen kaikille Python-kehittäjille, jotka työskentelevät ei-triviaalisten tietorakenteiden kanssa.

tuontipyynnöt
tuontipaino
url = 'https://randomuser.me/api/?results=1'
käyttäjät = request.get (URL) .json ()
pprint.pprint (käyttäjät)

Jonottaa

Python tukee monisäikeisyyttä, ja tätä helpottaa standardikirjaston Queue-moduuli.

Tämän moduulin avulla voit toteuttaa jonotietorakenteet. Nämä ovat tietorakenteita, joiden avulla voit lisätä ja hakea merkintöjä tietyn säännön mukaisesti.

'Ensimmäinen sisään, ensin ulos' (tai FIFO) -jonot antavat sinun noutaa esineitä lisäysjärjestyksessä. Viimeksi sisään, ensin (LIFO) -jonot antavat sinun käyttää ensin viimeksi lisättyjä objekteja.

Viimeiseksi, prioriteettijonojen avulla voit hakea objekteja niiden lajittelujärjestyksen mukaan.

Tässä on esimerkki jonon käyttämisestä monisäikeiseen ohjelmointiin Pythonissa.

__repr__

Kun määrittelet luokan tai objektin Pythonissa, on hyödyllistä tarjota 'virallinen' tapa edustaa objekti merkkijonona. Esimerkiksi:

>>> tiedosto = avoin ('file.txt', 'r')
>>> tulosta (tiedosto)

Tämä tekee koodien virheenkorjaamisesta paljon helpompaa. Lisää se luokan määritelmiin seuraavasti:

luokka someClass:
    def __repr __ (itse):
        palauta ""
someInstance = someClass ()
# tulostaa 
Tulosta (someInstance)

sh

Python tekee loistavasta skriptikielestä. Joskus standardi os- ja aliprosessikirjastojen käyttäminen voi olla hieman päänsärky.

Sh-kirjasto tarjoaa siisti vaihtoehdon.

Sen avulla voit kutsua mitä tahansa ohjelmaa ikään kuin se olisi tavallinen toiminto - hyödyllinen automatisoimalla työnkulut ja tehtävät, kaikki Pythonista.

tuo sh
sh.pwd ()
sh.mkdir ( 'new_folder')
sh.touch ( 'new_file.txt')
sh.whoami ()
sh.echo ('Tämä on hienoa!')

Kirjoita vinkkejä

Python on dynaamisesti tyypitetty kieli. Sinun ei tarvitse määritellä tietotyyppejä, kun määrität muuttujia, toimintoja, luokkia jne.

Tämä mahdollistaa nopeat kehitysajat. On kuitenkin muutamia ärsyttäviä asioita kuin yksinkertaisen kirjoitusongelman aiheuttama ajonaikainen virhe.

Python 3.5: n jälkeen sinulla on mahdollisuus antaa tyyppivinkkejä toimintojen määrittelyssä.

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

Voit myös määrittää tyypin aliakset:

kirjoittamalla tuontiluettelo
Vektori = Lista [kelluva]
Matriisi = Lista [vektori]
def addMatrix (a: Matrix, b: Matrix) -> Matrix:
  tulos = []
  i: lle, rivi luettelossa (a):
    tulos_row = []
    j: lle, col: lla (rivi):
      tulos_row + = [a [i] [j] + b [i] [j]]
    tulos + = [tulos_suora]
  palauttaa tuloksen
x = [[1.0, 0.0], [0.0, 1.0]]
y = [[2.0, 1.0], [0.0, -2.0]]
z = addMatrix (x, y)

Vaikka tyyppimerkinnät eivät ole pakollisia, ne voivat helpottaa koodisi ymmärtämistä.

Niiden avulla voit myös käyttää tyyppitarkistustyökaluja näiden hajautettujen TypeErrors-virheiden sieppaamiseen ennen ajonaikaa. Todennäköisesti kannattaa, jos työskentelet suurissa, monimutkaisissa projekteissa!

UUID

Nopea ja helppo tapa generoida uniikkeja tunnuksia (tai 'UUID-tunnuksia') Python Standard Libraryn uuid-moduulin kautta.

Tuo uuid
user_id = uuid.uuid4 ()
Tulosta (USER_ID)

Tämä luo satunnaistetun 128-bittisen numeron, joka on melkein varmasti ainutlaatuinen.

Itse asiassa on mahdollista luoda yli 2²² UUID-tunnuksia. Se on yli viisi undecillionia (tai 5 000 000 000 000 000 000 000 000 000 000 000).

Todennäköisyys löytää kopioita annetusta joukosta on erittäin pieni. Jopa biljoonaisella UUID-tunnuksella, olemassa olevan kaksoiskappaleen todennäköisyys on paljon, paljon vähemmän kuin yksi miljardissa.

Erittäin hyvä kahdelle koodiriville.

Virtuaaliympäristöt

Tämä on luultavasti suosikkini Python-asiani.

On todennäköistä, että työskentelet useiden Python-projektien kanssa yhdellä kertaa. Valitettavasti joskus kaksi hanketta tukeutuvat saman riippuvuuden eri versioihin. Mitä asennat järjestelmään?

Onneksi Pythonin tuki virtuaaliympäristöille antaa sinulle parhaat puolet molemmista maailmoista. Komentoriviltä:

python -m venv my-projekti
lähde oma projekti / bin / aktivoi
pip asentaa kaikki moduulit

Nyt sinulla voi olla Pythonin erillisiä versioita ja asennuksia käynnissä samassa koneessa. Lajiteltu!

wikipedia

Wikipediassa on loistava sovellusliittymä, jonka avulla käyttäjät voivat ohjelmoida pääsyn vertaansa vailla olevaan kokonaan ilmaiseen tietoon.

Wikipedia-moduuli tekee pääsyn tähän sovellusliittymään melkein kiusallisesti käteväksi.

Tuo wikipedia
tulos = wikipedia.page ('freeCodeCamp')
Tulosta (result.summary)
linkiksi tulos.linkeissä:
    Tulosta (linkki)

Kuten oikea sivusto, moduuli tukee useita kieliä, sivujen yksilöintiä, sivujen satunnaista hakua ja siinä on jopa lahjoitus () -menetelmä.

xkcd

Huumori on Python-kielen keskeinen piirre - onhan se nimetty brittiläisen komedialuonnoksen Monty Pythonin Flying Circus mukaan. Suuri osa Pythonin virallisista dokumenteista viittaa näytön kuuluisimpiin luonnoksiin.

Huumorintajua ei kuitenkaan rajoiteta asiakirjoihin. Mennä alla olevalle linjalle:

tuo antigravitaatio

Älä koskaan muuta, Python. Älä koskaan muuta.

YAML

YAML tarkoittaa 'YAML Ain't Markup Language'. Se on tietojen muotoilukieli ja on JSON: n yläjoukko.

Toisin kuin JSON, se voi tallentaa monimutkaisempia objekteja ja viitata omiin elementteihin. Voit myös kirjoittaa kommentteja, mikä tekee siitä erityisen sopivan asetustiedostojen kirjoittamiseen.

PyYAML-moduulin avulla voit käyttää YAMLia Pythonin kanssa. Asenna:

$ pip install pyyaml

Ja sitten tuo projektiisi:

tuo yaml

PyYAML: n avulla voit tallentaa minkä tahansa tietotyypin Python-objekteja ja myös käyttäjän määrittelemiä luokkia.

postinumero

Viimeinen temppu sinulle, ja se on todella siisti. Tarvitsitko koskaan sanakirjan muodostamista kahdesta luettelosta?

näppäimet = ['a', 'b', 'c']
vals = [1, 2, 3]
zip = dict (zip (avaimet, valit))

Sisäänrakennettu zip () -toiminto vie useita toistettavia objekteja ja palauttaa luettelon tuples. Jokainen pari ryhmittelee sisääntulobjektien elementit sijainti-indeksinsä perusteella.

Voit myös purkaa esineitä purkamalla * zip ().

Kiitos lukemisesta!

Joten siellä se on, Python-temppujen A-Z - toivottavasti olet löytänyt jotain hyödyllistä seuraavalle projektillesi.

Python on erittäin monipuolinen ja hyvin kehittynyt kieli, joten on ehdottomasti monia ominaisuuksia, joita en ole ympäriinsä sisällyttänyt.

Ole hyvä ja jaa kaikki omat Python-temppusi jättämällä vastaus alla!