Python >> Python Program >  >> Python

8 coolaste Python-programmeringsspråksfunktionerna

Efter att ha skrivit nästan 20 artiklar bara om Python, har jag bestämt mig för att ta lite tid att reflektera över vad jag har lärt mig. Till exempel skrev jag nyligen en sammanställningsartikel som innehåller 70+ Python-kodavsnitt. Nu har jag satt ihop en lista över några av de coolaste Python-programmeringsspråksfunktionerna.

Lista över coolaste Python-funktioner

Och utan vidare, låt oss ta en titt på några av de coolaste Python-funktionerna. Om du tror att jag har missat någon får du gärna släppa dem i kommentarerna.

Listförståelse

Min favoritfunktion i Python är överlägset listförståelsen. Ärligt talat, funktionen är inte så intressant; det är bara ett bekvämt sätt att skapa listor. Som sagt, det är en funktion som jag inte har sett på något annat populärt språk (t.ex. Java, C, C++, etc.). Som ett resultat ser jag till att dra nytta av det så ofta som möjligt. Här är några exempel:

# Generates a list containing values from 0 to 9
[i for i in range(10)]

# Generates a list of all even values from 0 to 9
[i for i range(10) if i % 2 == 0]

# Generates a list containing values from 1 to 10
[i + 1 for i in range(10)]

# Generates a list containing values from  0 to -9
[-i for i in range(10)]

# Generates all possible pairs between 0 and 9
[(a, b) for a in range(10) for b in range(10)]

# Shallow copies another list
my_list = [1, 3, 5, 7, 9]
[item for item in my_list]

Eftersom en listförståelse skapar en lista, kan vi arbeta med utdata som vilken annan lista som helst:

# Generates a list containing values from 0 to 9
nums = [i for i in range(10)]
nums[0]  # returns 0
nums[1]  # returns 1

Om du är intresserad av att lära dig hur du skriver dessa själv har jag en artikel för dig. I den kommer du att lära dig mer om syntaxen samt några applikationsområden. Om du har några av dina egna exempel, dela dem gärna i kommentarerna.

Generatoruttryck

En av de fina sakerna med att lära sig syntaxen för listförståelse är att den låter dig även skriva generatoruttryck. När allt kommer omkring är de väldigt lika – man sparar bara utrymme. Det är rätt! Generatoruttryck skapar faktiskt inte listor. Istället tillhandahåller de medel för att generera ett objekt i taget i en lista utan att någonsin konstruera den listan. Ta en titt:

# Generates values from 0 to 9
(i for i in range(10)])

# Generates values from 0 to 9
(i for i range(10) if i % 2 == 0)

# Generates values from 1 to 10
(i + 1 for i in range(10)])

# Generates values from  0 to -9
(-i for i in range(10))

# Generates all possible pairs between 0 and 9
((a, b) for a in range(10) for b in range(10))

# Generates a shallow copy of another list
my_list = [1, 3, 5, 7, 9]
(item for item in my_list)

Lägg märke till hur lik syntaxen är till listförståelsen. Applikationen är dock något annorlunda. Istället för att indexera elementen måste vi använda en speciell funktion:

# Generates values from 0 to 9
nums = (i for i in range(10)])
next(num)  # returns 0
next(num)  # returns 1

Eftersom en generator är en iterabel kan vi också komma undan med att använda for loop-syntaxen:

# Generates values from 0 to 9
nums = (i for i in range(10)])
for num in nums:
    print(num)  # prints each item in the generator

När vi har uttömt varje element blir generatoruttrycket värdelöst. Med andra ord kan vi bara generera varje element en gång. Efter det måste vi skriva uttrycket igen.

Slice Assignment

Har du någonsin velat ersätta hela delar av en lista? Tja, Python har en funktion som låter dig göra just det på en enda rad:skivtilldelning. Liksom skivning låter segmenttilldelning dig ange en region i en lista. Naturligtvis är skillnaden att segmenttilldelningen låter dig ersätta den regionen med vad du vill:

my_list = [1, 2, 3]

# Appending a list with slice assignment
my_list[len(my_list):] = [4]

# Prepending a list with slice assignment
my_list[:0] = [0]

# Replacing middle element
midpoint = len(my_list) // 2
my_list[midpoint: midpoint + 1] = [-2]

# Replacing arbitrary subsection
my_list[:2] = [3, 4, 5]

Som jag har nämnt i en relaterad artikel, slutar inte skivtilldelningen där. Vi kan använda vilken som helst iterabel på höger sida. Till exempel kan vi använda strängar, tupler, listförståelser eller till och med generatoruttryck. Med andra ord, våra tidigare två funktioner kan göra ett framträdande:

my_list = [1, 2, 3]
my_list[len(my_list):] = (item for item in range(5))

Sedan jag lärde mig om skivtilldelning i slutet av 2019 har jag varit besatt av det. Som ett resultat tror jag att det är min andra favoritfunktion precis bakom listförståelse. Just nu har jag ingen artikel som täcker den här funktionen mer i detalj, så du är välkommen att dela några av dina favoritexempel i kommentarerna.

Iterable uppackning (alias Destructuring)

Om du har kollat ​​in min artikel om att få det sista objektet i en lista, kanske du kommer ihåg att iterabel uppackning var en av lösningarna. Tanken är att vi kan dela upp en lista i två delar:den sista posten och allt annat:

my_list = [1, 2, 3]
*remainder, last_item = my_list

Tja, iterabel uppackning kan göra mer än att hämta slutet på en lista. Till exempel kan den användas för att byta variabler:

a = 1
b = 2
b, a = a, b

Normalt skulle vi behöva tre rader kod för att utföra ett byte:en för att skapa en temporär variabel, en annan för att skriva över en av variablerna och den sista för att kopiera den temporära variabeln till den andra variabeln. Med iterabel uppackning är det en enda rad kod.

Om iterabel uppackning ser bekant ut för dig kanske du känner till det från dess andra namn:destrukturering. Konstigt nog presenterade jag destrukturering i en artikel som täckte några av mina favoritfunktioner i alla programmeringsspråk.

Som sagt, jag använder inte iterabel uppackning särskilt ofta. Om du har några bra exempel som skulle komplettera den här listan, dela dem gärna.

Negativ indexering

Av alla funktioner på den här listan är negativ indexering kanske den mest subtila. Trots allt har många moderna programmeringsspråk någon form av listindexering. Men få har ett sätt att få det sista elementet i en lista så elegant:

my_list = [1, 2, 3]
last_item = my_list[-1]

Förutom att vi kan komma åt listelement omvänt, kan vi också använda negativ indexering med listmetoder som insert() , pop() och index() :

my_list = ['h', 'e', 'l', 'l', 'o']
my_list.insert(-1, 'l')  # ['h', 'e', 'l', 'l', 'l', 'o']
my_list.pop(-2)  # ['h', 'e', 'l', 'l', 'o']
my_list.index('l', -2)  # 3

Om du gillar negativ indexering kommer du vara glad att veta att den här funktionen inte slutar med listor. Använd den gärna med strängar, tupler och andra sekvenser.

Ordboksförståelse

Tidigare i den här listan nämnde jag listförståelser. Tydligen är den funktionen så bra att utvecklarna bestämde sig för att utöka dess kapacitet till att omfatta andra datastrukturer som ordböcker. När allt kommer omkring, skulle det inte vara trevligt att kunna generera en ordbok i en enda kodrad? Tja, från och med PEP 274 kan du:

# Generates a dictionary of numbers to letters
{num: chr(65 + num) for num in range(5)} 

# Generates the same thing
nums = [1, 2, 3, 4, 5]
letters = ["A", "B", "C", "D", "E"]
{num: letter for num, letter in zip(nums, letters)}

Vanligtvis använder jag en ordboksförståelse för att slå samman två listor till en ordbok. Som sagt, jag är säker på att det finns andra användningsfall. Dela gärna några av dina favoriter i kommentarerna.

Kedjejämförelser

I många moderna programmeringsspråk är det en enkel process att jämföra värden. Till exempel, i Java kan jag jämföra två siffror enligt följande:

17 > 5

I det här exemplet är resultatet ett booleskt värde, true . Som ett resultat är följande uttryck olagligt i Java:

17 > 5 > 1

Här, 17 > 5 bedöms till sant. Sedan uttrycket true > 1 utvärderas. Eftersom detta är meningslöst kraschar kompilatorn.

I Python kan vi dock kedja jämförelser utan några risker. Med andra ord, samma uttryck ovan är helt giltigt, och det returnerar True .

Under huven beräknas varje jämförelse precis som Java. Varje mellanresultat är dock AND-behandlat med resultatet av den andra jämförelsen. Till exempel 17 > 5 returnerar True . Sedan 5 > 1 returnerar True. Slutligen kombineras resultaten med and som returnerar True .

Personligen har jag inte använt den här funktionen mycket, men den har fått mycket uppmärksamhet i utvecklingsändan. Till exempel nämner PEP 535 några uppdateringar av kedjeprotokollet. Om du känner till några coola användningsfall för den här funktionen, låt mig veta i kommentarerna.

f-strängar

Slutligen kommer vi till en av mina favorit "nya" (PEP 498) Python-funktioner, f-Strings. Normalt, när vi skapar strängar för felsökning, skriver vi lätt ut dem med sammanlänkning. Om vi ​​är smarta kan vi använda några av strängformateringsteknikerna. Nu kan vi få det bästa av två världar med f-Strings:

age = 25
name = 'Jeremy'
print(f'My name is {name}, and I am {age}')

I det här exemplet har vi skapat en sträng från två variabler:name och age . Allt vi behövde göra var att lägga en f för vår sträng . Sedan kan vi placera vilket uttryck vi vill ha i hängslen, och det kommer att tolkas. Till exempel age är ett tal som automatiskt omvandlas till dess strängrepresentation.

Jag älskar verkligen den här f-String-syntaxen eftersom den löser många vanliga strängformateringsproblem. Till exempel gör det strängformatering mycket lätt att läsa (till skillnad från sammanlänkning). På samma sätt gör det det uppenbart hur utdatasträngen kommer att se ut (igen, till skillnad från sammanlänkning). Slutligen finns det inga problem med positionering av variabler (till skillnad från stränginterpolation). Vad du ser är vad du får.

Även om f-strängar är riktigt användbara, tycker jag inte att jag använder dem utöver felsökning. Har du några exempel du vill dela med dig av?

Hedrande omnämnanden

Som någon som verkligen älskar att arbeta med Python, hade jag svårt att hålla den här listan kort. Som ett resultat, här är några ytterligare funktioner som inte kom med:

  • For/Else-loopar
  • Imaginära siffror
  • Any() och All()
  • Returnera flera värden (tupler)
  • Godyckligt stora heltal
  • Sökordsargument
  • Set
  • Ansluta strängar
  • Multiplicera strängar
  • Walrus-operatör
  • Stränginterpolation
  • Skärning

Naturligtvis, med hur enormt standardbiblioteket är i Python, är jag säker på att det finns ännu mer smarta bitar av syntax. Dessutom är Python-utveckling väldigt aktiv, så jag skulle inte bli förvånad över att se ännu fler funktioner i framtiden. Jag kanske kommer att uppdatera den här listan då och då när nya funktioner dyker upp.

Rekommendationer

Med allt detta sagt, tack för att du stannade kvar för att kolla in den här listan. Under de kommande månaderna kommer jag att fokusera mer på Python- och Git-innehåll, så förvänta dig att se fler sådana här artiklar i framtiden. Om det är något du vill se, skriv en kommentar i kommentarerna eller kontakta mig gärna direkt.

Under tiden, stödja denna webbplats genom att hoppa på e-postlistan eller bli en beskyddare. Annars fortsätter du att bläddra i följande relaterade artiklar:

  • De coolaste programmeringsspråksfunktionerna
  • Hur man konverterar två listor till en ordbok i Python
  • Hur man formaterar en sträng i Python

Slutligen kan du få lite värde av följande Python-resurser från Amazon (annons):

  • Python:4 böcker i 1:Ultimate Beginner's Guide, 7 Days Crash Course, Advanced Guide, and Data Science, Lär dig datorprogrammering och maskininlärning med steg-för-steg-övningar
  • Python Pocket Reference:Python In Your Pocket

Annars, tack igen för din tid. Jag uppskattar det!