Python f-strings

Mit Python 3.6 PEP498 wurden die sogenannten f-strings eingeführt. Python f-strings sind vor allen besser lesbar, somit weniger fehleranfällig und sollten deshalb von Beginn an verwendet werden. f-strings sind auch schneller als str.format().

Viele Konzepte kennen wir schon von str.format().

Grundlagen

Strings sind mit f-strings besonders gut lesbar.

study = 'KI'
year = 2019
print(f'Seit {year} ist ein {study}-Studium an der JKU möglich!')
Seit 2019 ist ein KI-Studium an der JKU möglich!

Das gilt auch für Datentypen wie dict.

person = {'name': 'Max Musterman', 'year': 1980}
print(f"{person['name']} ist im Jahr {person['year']} geboren.")
Max Musterman ist im Jahr 1980 geboren.

In Python 3.8 wurde die neue f-string Syntax erweitert. Mit f"{var=} wird nicht nur der Variablenwert, sondern auch die Variable ausgegeben. Als Beispiel definieren wir die Variable python mit dem Wert 3.8.

python = 3.8
print(f"{python=}")
python=3.8

Als Anwendung soll das Debugging und das Logging genannt werden.

In Python 3.7 wäre eine etwas längerer Ausdruck notwendig.

python = 3.7
print(f"python={python}")
python=3.7

Mit Python 3.8 ist auch das Definieren von Variablen in einem String möglich. Dazu müssen wir die Syntax {(var:=value)} verwenden. Die Variable steht dann auch außerhalb des f-strings zur Verfügung.

print(f"Ein Quadrat hat die Seitenlänge {(s:=2)} und eine Fläche von {s**2}!")
s
Ein Quadrat hat die Seitenlänge 2 und eine Fläche von 4!
2

Funktionen

Weiters können auch Funktionen in Python f-strings verwendet werden.

import math

arg = 0
print(f'{math.sin(arg) = }')
print(f'{math.cos(arg) = }')
math.sin(arg) = 0.0
math.cos(arg) = 1.0

Präzision

Auch das Formatierung der Nachkommazahlen können wir wie in .format() verwenden.

value = 3.141592653589793

print(f'{value:.2f}')
print(f'{value:.4f}')
3.14
3.1416

Für komplexe Zahlen:

c_number = 1.111 + 2.222j

print(f'{c_number:.2f}')
print(f'{c_number:.4f}')
1.11+2.22j
1.1110+2.2220j

Zahlensysteme

Zahlen können in verschiedenen Systemen dargestellt werden. Mit Python f-strings können wir das Dezimalzahlensystem in das Binär, Hexadezimal oder Oktalsystem umrechnen. Diese Zahlensysteme sind in der Informatik von großer Bedeutung.

Besonders hilfreich ist die wissenschaftliche Darstellung von Zahlen.

number = 301

# hexadecimal
print(f'{number:b}')

# hexadecimal
print(f'{number:x}')

# octal
print(f'{number:o}')

# scientific
print(f'{number:.2e}')
100101101
12d
455
3.01e+02

Trennzeichen

Für eine bessere Lesbarkeit großer Zahlen schreiben wir oft Zahlen unter Verwendung eines Trennzeichens.

income = 1000000
print(f"{income:,}")
print(f"{income:_}")
1,000,000
1_000_000

Wir können das auch bei float Zahlen anwenden.

income = 100000
month = 12
ipm = income/month
print(f"{ipm:,.3f}")
print(f"{ipm:_.3f}")
8,333.333
8_333.333

Prozentsätze

Anstatt f können wir mit % eine Zahl als Prozentsatz formatieren. Dabei werden Zahlen zwischen \(0.\) und \(1.\) als Prozentzahlen zwischen \(0%\) und \(100%\) aufgefasst.

print(f"{0.5 :.2%}")
50.00%
print(f"{-0.5 :.2%}")
-50.00%

Das könnte zum Beispiel für das Benoten von Klausuren zum Einsatz kommen.

total_points = 30
correct_points = 19
print(f" Sie haben {correct_points/total_points :.2%} der möglichen Punkte erreicht.")
 Sie haben 63.33% der möglichen Punkte erreicht.