Skip to content

Radbrytning i Python

En av alla regler vi kolla med Ruff är att koden inte ska vara för lång. Pep8 rekommenderar att rader inte ska vara längre än 79 tecken. Nu för tiden tycker många att 79 tecken är för få, därför ha vi ökat det till 100 tecken i denna kursen.

Ganska ofta kommer du stöta på rader som är längre än 100 tecken. Då kommer Ruff att ge dig varningen Line to long och du måste dela upp raden i flera rader.

Line to long

Följande kodrad är 109 tecken lång, vilket är för långt.

a_long_variable_name_with_along_calculation = 2222222222222222222222222222222+444444444444444444444444444444

Om vi kör Ruff på koden får vi följande felmeddelande.

Image description
Bild: Line to long fel från Ruff

Det finns två sätt att dela upp rader, implied line continuation inside brackets and braces och backslash, \. Pep8 rekommenderar att använda parenteser.

Parenteser

Ett par exempel där vi använder parenteser för att dela upp rader.

Matematiska operationer

Vi flyttar beräkningen inom parenteser och gör radbrytningen efter likamedtecknet.

a_long_variable_name_with_along_calculation = (
2222222222222222222222222222222 + 444444444444444444444444444444
)

Om vi har flera operationer på samma rad kan vi göra extra indentation, så kallad hanging indentation, för att det lättare ska gå att urskilja vilka rader som är uppdelade. Det går att läsa mer om det i pep8.

income = (gross_wages
+ taxable_interest
+ (dividends - qualified_dividends)
- ira_deduction
- student_loan_interest)

Långa strängar

Ett annat vanligt tillfälle när man får line to long är när man har en lång text sträng.

long_string = ("The Wheel of Time turns, and ages come and pass, leaving memories that become legend."
" Legends fade to myth, and even myth is long forgotten when the Age that gave it birth comes again."
" In one Age, called the third age by some, an Age yet to come, an age long pass,"
" a wind rose in the Mountains of Mist.")

Vi behöver inte kommatecken mellan varje sträng, Python konkatenerar automatiskt alla raderna.

Funktionsanrop och villkor

foo = long_function_name(var_one, var_two,
var_three, var_four)
if (x == 10
or x > 0
or x < 100):
print(True)

Backslash

Vi kollar även på hur det ser ut med backslash. Om man använder backslash är det viktigt att det inte är något space efter backslashet.

if x == 10 \
or x > 0 \
or x < 100:
print(True)
income = gross_wages \
+ taxable_interest \
+ (dividends - qualified_dividends) \
- ira_deduction \
- student_loan_interest

Även om det generellt är rekommenderat att använda parenteser finns det tillfällen man behöver använda backslash. T.ex. flera with och assert uttryck, då fungerar inte parenteser för uppdelning.

with open('/path/to/some/file/you/want/to/read') as file_1, \
open('/path/to/some/file/being/written', 'w') as file_2:
file_2.write(file_1.read())