Le plus proche que vous puissiez obtenir est d'utiliser les généralisations supplémentaires de déballage pour décompresser une longueur variable interne tuple
(ou list
) sur la base du résultat d'une analyse conditionnelle if/else
opérateur :
middleware = ["a",
"b",
*(("c",) if DEBUG else ()), # Or if you like brackets, *(["c"] if DEBUG else [])
"d"
]
En utilisant le déballage, vous pouvez choisir entre deux séquences internes différentes à déballer, obtenant ainsi le résultat souhaité avec des modifications minimales de votre syntaxe.
Dans le cas spécifique des cordes de longueur un, la ligne du milieu peut être simplifiée comme suit :
*("c" if DEBUG else ""),
ou même (si DEBUG
est un booléen, ou un 0
o >0
valeur entière) :
*"c"[:DEBUG],
*"c" * DEBUG, # For boolean or 0/1 integers only
et celles-ci peuvent être étendues à des chaînes de caractères d'une longueur différente de un en les enveloppant dans list
des crochets :
*["abc"][:DEBUG],
*["abc"] * DEBUG, # For boolean or 0/1 integers only
mais toutes ces alternatives tombent dans la catégorie des astuces de programmation "trop intelligentes à moitié" (si vous vous retrouvez à faire beaucoup de maths ou de découpage avec bool
s, vous êtes probablement trop intelligent).