Seite 1 von 1

Linter Empfehlungen

Verfasst: Dienstag 10. Mai 2022, 18:30
von Kebap
Hallo Leute,

wie findet ihr diese Struktur?

Code: Alles auswählen

def berechne_etwas(zahl):
    return zahl * 2 / 3

zahl = input("Welche Zahl hätten Sie gern? ")
print(f"Das Ergebnis lautet: {berechne_etwas(zahl)}")
Also insbesondere geht es um die Variablen namens "zahl". Mein Linter meckert nämlich an:
warning:
redefined-outer-name: Redefining name 'zahl' from outer scope
Na klar, verstehe ich, da gibt es eine globale Variable namens "zahl" und nun auch eine lokale Variable (Parameter) mit demselben Namen.
Finde ich aber in diesem Fall gar nicht mal so tragisch, weil sie ja auch beide den gleichen Wert haben und diesen im Verlauf nicht mal verändern.
Wenn ich hingegen plötzlich eine ganz andere Sache berechnen würde und mit diesem selben Namen speichern würde, dann verstehe ich die Kritik.

Ich habe dann noch eine andere Struktur probiert, um den Linter ruhig zu stellen:

Code: Alles auswählen

def berechne_etwas(z):
    return z * 2 / 3

zahl = input("Welche Zahl hätten Sie gern? ")
print(f"Das Ergebnis lautet: {berechne_etwas(zahl)}")
Das gibt aber prompt noch eine andere Warnung nämlich:
invalid-name: Argument name "z" doesn't conform to '[a-z][a-z0-9_]{2,30}$' pattern
Also verstehe ich das so, dass der Linter mir Namen mit mindestens drei Zeichen empfiehlt.
Gut, das kann ich nachvollziehen. Finde "z" ja selber auch nicht sehr toll.
Sehe aber auch nicht ein, mir einen dreibuchstabigen Namen für dieselbe Sache auszudenken, nur weil ich mal eine Funktion benutzen möchte.

Also wie handhabt ihr das? Überschreibt ihr einfach mit demselben Namen? Noch eine andere Lösung?

Ich hoffe mein Beispiel ist nicht zu abstrakt.

Re: Linter Empfehlungen

Verfasst: Dienstag 10. Mai 2022, 18:44
von pillmuncher
Kebap hat geschrieben: Dienstag 10. Mai 2022, 18:30 Hallo Leute,

wie findet ihr diese Struktur?

Code: Alles auswählen

def berechne_etwas(zahl):
    return zahl * 2 / 3

zahl = input("Welche Zahl hätten Sie gern? ")
print(f"Das Ergebnis lautet: {berechne_etwas(zahl)}")
Die Lösung ist, dass auf Modulebene nur Importe und Klassen-, Funktions- und Konstantendefinitionen stehen.

Code: Alles auswählen

def berechne_etwas(zahl):
    return zahl * 2 / 3

def main():
    zahl = input("Welche Zahl hätten Sie gern? ")
    print(f"Das Ergebnis lautet: {berechne_etwas(zahl)}")

if __name__ == '__main__':
    main()
Ungetestet.

Re: Linter Empfehlungen

Verfasst: Dienstag 10. Mai 2022, 18:45
von __blackjack__
@Kebap: `zahl` hat halt nichts auf Modulebene zu suchen. Die beiden Zeilen auf Modulebene in eine `main()`-Funktion gesteckt, und schon ist alles gut.

Code: Alles auswählen

#!/usr/bin/env python3


def berechne_etwas(zahl):
    return zahl * 2 / 3


def main():
    zahl = input("Welche Zahl hätten Sie gern? ")
    print(f"Das Ergebnis lautet: {berechne_etwas(zahl)}")


if __name__ == "__main__":
    main()