Seite 1 von 1

bedingt *args übergeben...

Verfasst: Montag 6. März 2006, 23:52
von jens
Wie kann man das einfacher Lösen:

Code: Alles auswählen

        args = {"prefix": "PyDown_%s_" % self.request.environ["REMOTE_USER"]}
        if self.request.cfg["temp"]:
            args["dir"] = self.request.cfg["temp"]

        temp = NamedTemporaryFile(**args)
:?:

Re: bedingt *args übergeben...

Verfasst: Dienstag 7. März 2006, 00:32
von gerold
jens hat geschrieben:Wie kann man das einfacher Lösen:
Hi Jens!

Das ist, in meinen Augen, eine schöne Lösung.

lg
Gerold
:-)

Verfasst: Dienstag 7. März 2006, 00:43
von rayo
Hi

Kommt darauf an was die Funktion für Defaultwerte besitzt.

Ich hätte es wahrscheinlich so gelöst:

Code: Alles auswählen

pref = "PyDown_%s_" % self.request.environ["REMOTE_USER"]

temp = NamedTemporaryFile(prefix=pref, dir=self.request.cfg["temp"])
Aber ob dies wirklich schöner ist, ist eine andere Frage :)

Verfasst: Dienstag 7. März 2006, 08:48
von jens
OK ich hab mal in den Sourcen geschnüffelt, das hätte ich machen sollen, bevor ich die Frage stellte: http://svn.python.org/view/python/trunk ... iew=markup

Wie man sehen kann wird NamedTemporaryFile so "definiert":

Code: Alles auswählen

def NamedTemporaryFile(mode='w+b', bufsize=-1, suffix="",
                       prefix=template, dir=None):
Demnach kann ich es ganz einfach machen:

Code: Alles auswählen

temp = NamedTemporaryFile(
    "prefix" = "PyDown_%s_" % self.request.environ["REMOTE_USER"],
    "dir" = self.request.cfg["temp"]
)
Mir ging es darum, wie ich "dir" setzten kann, damit man nicht immer explizit ein Verz. angeben muß. Min anderen Worten, welchen Wert muß self.request.cfg["temp"] haben, wenn das default-System-temp-Verz. genommen werden soll?
In dem Fall ist es einfach None.

Aber man kann doch nicht davon ausgehen, das bei einer ganze anderen Funktion bzw. bei jeder Funktion, der default-Wert immer mit None gesetzt werden kann, oder? Obwohl das eigentlich das Naheliegendste ist...

Verfasst: Dienstag 7. März 2006, 09:38
von rayo
Hi

Ich dachte eben das sei eine Funktion von dir. Darum muss man halt nachschauen was es ist (vielleicht steht es auch in der Doku).

Gruss