@fsg: Warum möchtest Du das? Python ist nicht die Sprache für Leute die unbedingt alles in eine Zeile schreiben wollen. Schon nach dem Doppelpungt bei ``if`` etwas zu schreiben ist falsch. Ja, Python erlaubt das, aber das macht kein Python-Programmierer. Schau mal in den
Style Guide for Python Code.
Dein erstes Code-Beispiel sollte von der Formatierung her so aussehen:
Code: Alles auswählen
def check_int(number):
if type(number) == int:
return number
return False
def foo():
x = check_int(3)
if not check_int(3):
return
print(x)
# do something with x
foo()
Der Name `number` bei `check_int()` ist irreführend — zu dem Zeitpunkt weiss man ja noch gar nicht ob es sich um eine Zahl handelt.
Wobei man die `check_int()` tatsächlich auch „pythonisch“ in einer Zeile schreiben kann:
Code: Alles auswählen
def check_int(value):
return value if type(value) == int else False
Eine Typprüfung ist aber auch keine gute Idee. Hier insbesondere weil das ja eine weitere Typprüfung nach sich zieht, denn woran erkennst man sonst ob 0 oder etwas das vom Typ her keine ganze Zahl übergeben wurde? Denn `False` ist auch 0 weil `bool` von `int` abgeleitet ist und `False` gleichzeitig die ganze Zahl 0 ist. (Und `True` die ganze Zahl 1.) Was versuchst Du hier komisches? Typprüfung geht gegen Python's „duck typing“. Und allgemein aus OOP-Sicht ist es auch nicht gut. Es gibt Gründe, aber die sind selten.
In `foo()` wird der `check_int()`-Aufruf unnötig zweimal gemacht.
Code: Alles auswählen
def foo():
x = check_int(3)
if not x:
return
print(x)
# do something with x
# oder
def foo():
x = check_int(3)
if x:
print(x)
# do something with x
Ab Python 3.8 geht auch folgendes:
Code: Alles auswählen
def foo():
if x := check_int(3):
print(x)
# do something with x
Wobei der „Walross-Operator“ ``:=`` bei der Einführung sehr kontrovers war, und man damit die Kompatibilität des Quelltextes auf Python 3.8+ einschränkt.