x parametre

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.
lunar

@BlackJack: Nun, offenbar hindert Dich dennoch nichts daran, von der „vergeigten API“ zu profitieren, in dem Du diese in Deinem Quelltext verwendest. Gäbe es diese API nicht, dann bleibe nur an dieser Stelle doch eher unschöne Literalform.

Die Nachteile habe ich im Übrigen nicht in Abrede gestellt, doch bezweifele ich deren Auswirkungen. Ich sah mich nie in der Situation, benutzerdefinierte Hash-Funktionen zu nutzen, in Python nicht, und auch nicht in C++, wo dies bei den meisten Bibliotheken, die ungeordnete Mengen und Wörterbücher bieten (insbesondere Boost oder C++0x) möglich ist.
BlackJack

@lunar: Was sollte mich denn daran hindern? Dir ist der Unterschied zwischen etwas benutzen was schon da ist, und das man nicht ändern kann, und dem Entwurf eigener APIs schon klar!? Und ich würde auch die Literalform vorziehen wenn die `dict()`-Signatur anders aussehen würde.

Schön dass Du über solche Probleme noch nicht gestolpert bist -- Leser der Python-Newsgroup halt schon und ich persönlich auch schon. Dementsprechend bezweifle ich die Auswirkungen nicht. Man muss sich halt klar darüber sein, dass man die API bei so einer Signatur in Stein meisselt und nicht mehr problemlos erweitern/ändern kann, und wenn man keine Namenskollisionen haben möchte, wirklich *nur* ``*args`` und ``**kwargs`` verwenden kann, und kein anderes, weiteres Argument. Und das Python-Schlüsselworte auch dann noch problematisch sind.
lunar

@BlackJack: Du „würdest, wenn die "dict()"-Signatur anders aussehen würde“?! Nun sieht die "dict()"-Signatur aber nicht anders aus, und offenbar ziehst Du sie nun, da sie existiert, doch der Literalform vor. Ich erlaube mir, daraus zu schließen, dass Du diese Signatur der Lesbarkeit des Quelltexts für zuträglicher hältst als die Literalform, und dies nun ist genau mein Punkt: Wenn die Anwendung der **kwargs-Magie den Quelltext lesbarer werden lässt, habe ich nichts dagegen, vor allem nicht in so dogmatischer Art und Weise.

Um auf das diskutierte Beispiel der "Template.render()"-Methode zurückzukommen: Hier ist diese Syntax lesbarer als die Literalform, teilweise, weil die eigentlich redundanten Klammern entfallen und die Zeichenkettenliterale implizit sind, vor allem aber, weil sie dokumentiert, dass an dieser Stelle tatsächlich nur bestimmte Schlüssel erlaubt sind. Schließlich unterliegen Bezeichner in der Template-Sprache nahezu denselben syntaktischen Regeln wie in Python (zumindest in Mako und Jinja). Es ist also im Gegensatz zur Literalform deutlich, dass diese Schlüssel keine Daten sind, wie DasIch suggerieren wollte, sondern eben Bezeichner, nichts anderes eigentlich als Namen in einem Python-Programm.

Ich finde, dass dieser Vorteil deutlich wichtiger ist als die in diesem Fall wirklich sehr entfernte Möglichkeit, dass unbedingt ein zusätzliches Schlüsselwortargument zur Signatur hinzukommen müsste, ohne dass es eine andere sinnvolle Alternative gäbe.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

lunar hat geschrieben:@BlackJack: Du „würdest, wenn die "dict()"-Signatur anders aussehen würde“?! Nun sieht die "dict()"-Signatur aber nicht anders aus, und offenbar ziehst Du sie nun, da sie existiert, doch der Literalform vor.
In jinja2 verwendet Mitsuhiko übrigens tatsächlich die Literalform bei der Dokumentation der render()-Methode:
http://dev.pocoo.org/hg/jinja2-main/fil ... nt.py#l882
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Kann das hier einer mal zusammenfassen ?

Denn als jemand der sich noch nie damit befasst hat ist es nicht ganz einfach euch zu folgen.
Also wann ist den nun wann besser ?

Da ich meist mit Tkinter arbeite, weiß ich das dort immer beides ermöglicht wird sowohl dict(), als auch **kwargs, denn die Funktionen sehen ja immer so aus:

Code: Alles auswählen

def __init__(self, master=None, cnf={}, **kw):
Aber welche Möglichkeit sollte man hier nutzen ?
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

push

Die Fragen interessieren mich eigentlich immer noch :?
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Antworten