Dans mon script Python, j'appelle cette fonction plusieurs fois

write2db(int(pocnr), larm1, tid, label1, q1, x, y, lat, long, radio)

Je veux pouvoir avoir l'ensemble des variables dans une variable.

Devrait ressembler à ceci

Write2db (myargs)

Ainsi, lorsque je modifie la liste des arguments, je n'ai pas à le faire à plus d'un endroit. J'ai essayé quelques trucs mais jusqu'ici pas de chance. Aucune suggestion?

0
Stefan Rydberg 17 janv. 2017 à 01:26

2 réponses

Meilleure réponse

Vous pouvez utiliser *args ou **kwargs. Les noms args et kwargs n'ont pas vraiment d'importance, mais ce sont les * et ** qui font l'affaire. En gros, * décompressera une liste, et de même, ** décompressera un dict.

*args est juste une liste de valeurs dans le même ordre que celui où vous avez défini votre fonction.

Par exemple.

args = [23, 6, 2, "label", 5, 25, 21, 343.22, 111.34, 2]
write2db(*args)

**kwargs est un mappage clé-valeur (dict python) des noms d'argument aux valeurs d'argument

Par exemple.

kwargs = {
    'pocnr': 23,
    'larm1': 21,
    # ... etc.
}
write2db(**kwargs)
2
denvaar 16 janv. 2017 à 22:34

Vous pouvez créer un ensemble nommé avec chacun de ces arguments, puis extraire les arguments par nom à l'intérieur de la fonction.

Ou vous pouvez simplement utiliser l'argument de longueur variable * args, puis à l'intérieur de votre fonction:

    for arg in args:
        # do something with arg
0
Greg Jennings 16 janv. 2017 à 22:32