Problem: Hur utför man villkorliga if-tilldelningar på en rad i Python?
Exempel: Du vill sätta värdet för x
till 42
om boo
är True
, och inte göra någonting annars.
Låt oss dyka ner i de olika sätten att åstadkomma detta i Python. Vi börjar med en översikt:
Övning: Kör koden. Är alla utdata likadana?
Nästan ska du dyka ner i var och en av dessa metoder och öka dina superkrafter med en enda rad!
Innehållsförteckning
Metod 1: Tärnäroperator
Den mest grundläggande tärnäroperatorn x if c else y
returnerar uttrycket x
om det boolska uttrycket c
utvärderar till True
. I annat fall, om uttrycket c
utvärderar till False
, returnerar den ternära operatören det alternativa uttrycket y
.
<OnTrue> if <Condition> else <OnFalse>
Operand | Beskrivning |
---|---|
<OnTrue> | Operatorns returuttryck i händelse av att det villkoret utvärderas till True |
<Kondition> | Det villkor som avgör om <On True> eller <On False>grenen ska returneras. |
<OnFalse> | Returuttrycket för operatören om villkoret utvärderas till False |
Vi går tillbaka till vårt exempelproblem! Du vill sätta värdet för x
till 42
om boo
är True
, och inte göra någonting annars. Så här gör du på en enda rad:
x = 42 if boo else x
Samtidigt som det fungerar att använda den ternära operatorn kan du undra om det är möjligt att undvika ...else x
-delen för att göra koden tydligare? I nästa metod får du veta hur!
Om du behöver förbättra din förståelse för den ternära operatören kan du titta på följande video:
Du kan också läsa den relaterade artikeln:
- Python One Line Ternary
Metod 2: Enradigt If-uttalande
Som i den föregående metoden vill du ställa in värdet på x
till 42
om boo
är True
, och inte göra något annars. Men du vill inte ha en överflödig else-gren. Hur gör man detta i Python?
Lösningen för att hoppa över else-delen av den ternära operatören är förvånansvärt enkel – använd ett standard if-uttalande utan else-gren och skriv det i en enda kodrad:
if boo: x = 42
Om du vill veta mer om vad du kan packa in i en enda rad kan du titta på min instruktionsvideo ”If-Then-Else in One Line Python”:
Metod 3: Hack av den ternära tupelsyntaxen
En förkortning av den ternära operatören är följande tupelsyntax.
Syntax: Du kan använda tupelsyntaxen (x, y)
som består av en tupel (x, y)
och ett villkor c
inneslutet i en hakparentes. Här är ett mer intuitivt sätt att representera denna tupelsyntax.
(<OnFalse>, <OnTrue>)
Operand | Beskrivning |
---|---|
<OnTrue> | Operatorns returuttryck i det fall att villkoret utvärderas till True |
<Kondition> | Det villkor som avgör om <On True> eller <On False>grenen ska returneras. |
<OnFalse> | Returuttrycket för operatören om villkoret utvärderas till False |
I själva verket, är ordningen för <OnFalse>
och <OnTrue>
operanderna bara ombytta jämfört med den grundläggande ternära operatören. Först har du den gren som returneras om villkoret INTE gäller. För det andra kör du den gren som returneras om villkoret håller.
x = (x, 42)
>Snålt! Villkoret boo
håller så det returvärde som skickas till variabeln x
är <OnTrue>
grenen 42
.
Oroa dig inte om detta förvirrar dig – du är inte ensam. Du kan klargöra tupelsyntaxen en gång för alla genom att studera min detaljerade bloggartikel.
Relaterad artikel: Python Ternary – Tuple Syntax Hack
Python One-Liners Book
Python-programmerare kommer att förbättra sina datavetenskapliga färdigheter med dessa användbara one-liners.
Python One-Liners kommer att lära dig att läsa och skriva ”one-liners”: koncisa uttalanden om användbar funktionalitet som är packade i en enda kodrad. Du lär dig att systematiskt packa upp och förstå vilken rad Pythonkod som helst och skriva vältalig, kraftfullt komprimerad Python som en expert.
Bokens fem kapitel täcker tips och tricks, reguljära uttryck, maskininlärning, centrala datavetenskapliga ämnen och användbara algoritmer. Detaljerade förklaringar av one-liners introducerar viktiga datavetenskapliga begrepp och ökar dina kodnings- och analytiska färdigheter. Du lär dig om avancerade Pythonfunktioner som listförståelse, slicing, lambdafunktioner, reguljära uttryck, map- och reduce-funktioner och slice-uppdrag. Du lär dig också hur du kan:
– Utnyttja datastrukturer för att lösa verkliga problem, t.ex. genom att använda boolesk indexering för att hitta städer med en förorening som ligger över genomsnittet
– Använda grundläggande funktioner i NumPy, t.ex. array, shape, axis, type, broadcasting, avancerad indexering, slicing, sortering, sökning, aggregering och statistik
– Beräkna grundläggande statistik för flerdimensionella datamatriser och K-Means-algoritmerna för oövervakad inlärning
– Skapa mer avancerade reguljära uttryck med hjälp av gruppering och namngivna grupper, negativa lookaheads, undangömda tecken, vitrymder, teckenuppsättningar (och negativa teckenuppsättningar) och greedy/nongreedy-operatorer
– Förstå ett brett spektrum av datavetenskapliga ämnen, inklusive anagram, palindromer, superuppsättningar, permutationer, faktorier, primtal, Fibonacci-tal, mörkläggning, sökning och algoritmisk sortering
I slutet av boken kommer du att veta hur man skriver Python på dess mest raffinerade sätt och skapa koncisa, vackra stycken av ”Pythonkonst” på bara en enda rad.
Hämta dina Python One-Liners nu!!
Under tiden som forskare inom distribuerade system upptäckte Dr. Christian Mayer sin kärlek till att undervisa datavetenskapsstudenter.
För att hjälpa studenterna att nå högre nivåer av Pythonframgång grundade han webbplatsen för programmeringsutbildning Finxter.com. Han är författare till den populära programmeringsboken Python One-Liners (NoStarch 2020), medförfattare till serien Coffee Break Python med egenutgivna böcker, datavetenskapsentusiast, frilansare och ägare till en av de tio största Pythonbloggarna i världen.
Hans passioner är att skriva, läsa och programmera. Men hans största passion är att tjäna blivande kodare genom Finxter och hjälpa dem att öka sina färdigheter. Du kan gå med i hans kostnadsfria e-postakademi här.