Forum: PC Hard- und Software python: Übergabeparameter Funktion


von Zo R. (hsch1978)


Lesenswert?

Hallo,

in eine Funktion werden 10 Parameter übergeben. Dies ist allerdings sehr 
unübersichtlich. Wie kann die Übergabe dieser Parameter über ein 
Referenz realisiert werden?
1
parameters: ClassSetupParameters = step.input["param"]
2
3
arg0 = parameters.value1
4
arg1 = parameters.value2
5
arg2 = parameters.value3
6
arg3 = parameters.value4
7
arg4 = parameters.value5
8
arg5 = parameters.value6
9
arg6 = parameters.value7
10
arg7 = parameters.value8
11
arg8 = parameters.value9
12
arg9 = parameters.value10
13
14
response = write_parameters(arg0, arg1, arg2, arg3, arg4, arg5,arg6, arg7, arg8, arg9)

von Sven B. (scummos)


Lesenswert?

warum nicht einfach

write_parameters(parameters)

und fertig?

von Stephan S. (uxdx)


Lesenswert?

Bei mir sind solche Parameter ggf eine Liste

von Norbert (der_norbert)


Lesenswert?

1
#!/usr/bin/python3
2
# -*- coding: UTF-8 -*-
3
# vim:fileencoding=UTF-8:ts=4
4
5
def func(*args, **kwargs):
6
    for i, v in enumerate(args):
7
        print(i, type(v), v)
8
    for k, v in kwargs.items():
9
        print(k, type(v), v)
10
11
func(1,2,'Hallo', [9,8,7], foo=6,bar='777')

von Re D. (re_d228)


Lesenswert?

Stephan S. schrieb:
> Bei mir sind solche Parameter ggf eine Liste

Oder noch besser ein Objekt!
Das Beispiel zeigt mal wieder, das man auch in Python hässlichen Code 
schreiben kann.

von Re D. (re_d228)


Lesenswert?

Sven B. schrieb:
> warum nicht einfach
> write_parameters(parameters)
> und fertig?

Wenn es im Übrigen darum geht, die Attribute eines Objekts auszugeben, 
geht das viel eleganter, wenn man mit _str_ und dir, und getattr 
arbeitet.

von Zo R. (hsch1978)


Lesenswert?

Hast du dazu ein Beispiel?

von Sven B. (scummos)


Lesenswert?

Um Attribute eines Objekts mit dir und getattr auszugeben? Das ist 
wirklich eine perfekte Stackoverflow- oder ChatGPT-Frage. Dazu gibts 
tausende Treffer.

Stephan S. schrieb:
> Bei mir sind solche Parameter ggf eine Liste

Er hat doch schon ein Objekt. Warum jetzt dadraus umständlich eine Liste 
machen, nur um dann in der Funktion in den Genuss zu kommen, die 
Parameter nach Index statt nach Namen wieder mühsam aus der Liste 
herauszuklauben?

: Bearbeitet durch User
von Zo R. (hsch1978)


Lesenswert?

Danke für Eure Hilfe.
Ich habe einen Weg gefunden. Mit set attribute und getattr werde ich das 
lösen.

von Ein T. (ein_typ)


Lesenswert?

Zo R. schrieb:
> Danke für Eure Hilfe.
> Ich habe einen Weg gefunden. Mit set attribute und getattr werde ich das
> lösen.

Verzeihung, aber die Verwendung von setattr() und getattr() ist meistens 
ein Anzeichen für ein... merkwürdiges Softwaredesign.

von Sebastian W. (wangnick)


Lesenswert?

Wenn man in Python z.B. eine Liste l mit drei Elementen hat, und möchte 
diese Elemente einer Funktion mit drei Parametern übergeben, dann kann 
man beim Aufruf in der Parameterliste *l benutzen (den Auspackoperator) 
um alle drei Parameter aus der Liste zu befüllen.

LG, Sebastian

von Sven B. (scummos)


Lesenswert?

Ein T. schrieb:
> Zo R. schrieb:
>> Danke für Eure Hilfe.
>> Ich habe einen Weg gefunden. Mit set attribute und getattr werde ich das
>> lösen.
>
> Verzeihung, aber die Verwendung von setattr() und getattr() ist meistens
> ein Anzeichen für ein... merkwürdiges Softwaredesign.

Naja, für eine generische Logging- oder Debug-Funktion ist das 
sicherlich geeignet.

von Zo R. (hsch1978)


Lesenswert?

Macht keine Wissenschaft daraus. Hauptsache ich habe einen Weg gefunden.

: Bearbeitet durch User
von Ein T. (ein_typ)


Lesenswert?

Zo R. schrieb:
> Macht keine Wissenschaft daraus. Hauptsache ich habe einen Weg gefunden.

Wenn das Dein Anspruch ist... wie schon jemand weiter oben gesagt hat: 
man kann auch in Python schlechten Code schreiben, wenn man sich Mühe 
gibt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.