Linter Empfehlungen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

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.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

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.
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten