Dictionary einer Methode über kwargs übergeben

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
Frank123456
User
Beiträge: 1
Registriert: Montag 19. August 2019, 09:54

Hallo, ich schaffe es einfach nicht, ein Dictionary meiner Methode zu übergeben... Hier hab ich einen Beispiel-Code:

Code: Alles auswählen

_MyDict = {"age":"25", "name":"Frank"}

def myMethod(**kwargs):
    Name = kwargs.pop('Name', 'InitialName')
    Age = kwargs.pop('Age', 'InitialAge')
    print("Name:" + Name)
    print("Age:" + Age)

myMethod(_MyDict)
###########################################################
Folgender Fehler wird mir ausgegeben:
###########################################################
Traceback (most recent call last):
File "main.py", line 17, in <module>
myMethod(_MyDict)
TypeError: myMethod() takes 0 positional arguments but 1 was given


...Program finished with exit code 1
Press ENTER to exit console.
############################################################
Was mache ich hier bloß Falsch?

Danke schon mal für die Hilfe im Vorraus, LG
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du kwargs benutzen willst, musst du das auch schon auf der aufrufenden Seite angeben. Sonst wuerde jedes uebergebene dict automatisch expandiert, mit katastrophalen Folgen.

Code: Alles auswählen

my_method(**my_dict)
ist die Antwort. Dann auch gleich noch den Python Namenskonventionen aus PEP8 entsprechend. Und vor allem OHNE fuehrenden Unterstrich bei Variablennamen! Das bedeutet naemlich das es sich um eine unbenutzte Variable handelt.

Last but not least: sollte dein Alter nicht 25 (die Zahl) statt "25" der String sein? Denn so wie du das schreibst ist zB "7" > "25", was ja nicht ganz wahr ist...
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Auf Modulebene würde ich den führenden Unterstrich als Kennzeichnung für „nicht öffentlich“ ansehen. Ein ``from module import *`` behandelt das ja entsprechend.

@Frank123456: Auch wenn man sich an die Namenskonventionen hält: `my` ist ein unsinniger Präfix den man sich gar nicht erst angewöhnen soll. Es sei denn es gibt neben `my_method` auch noch `their_method`, `our_method`, `freds_method`, …
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten