Instruction conditionnelle dans une ligne lambda fonction en python?

Excuses si cela a déjà été posées, mais je ne pouvais pas le voir partout.

Essentiellement, je suis venu à travers un scénario où j'ai besoin de faire usage d'une instruction if à l'intérieur d'une fonction lambda. Ce qui le rend difficile est que, idéalement, il doit être sur une seule ligne de code (si c'est encore possible?)

Normalement, je voudrais écrire ceci:

T = 250

if (T > 200):
    rate = 200*exp(-T)
else:
    rate = 400*exp(-T)

return (rate)

Cependant j'ai besoin qu'elle ressemble à ceci:

rate = lambda(T) : if (T>200): return(200*exp(-T)); else: return(400*exp(-T))

Je me rends compte que le plus facile chose à faire serait de prendre la décision prise à l'extérieur de la lambda fonctions, et ensuite avoir une fonction lambda pour chaque cas, mais ce n'est pas vraiment approprié ici. Les lambda fonctions sont stockées dans un tableau et accessible lorsque cela est nécessaire, avec chaque élément du tableau correspondant à un "taux" de sorte d'avoir deux lignes séparées pour le même "taux" serait gâcher les choses. Toute aide serait grandement appréciée, ou si ce n'est pas possible, la confirmation des autres serait sympa 🙂

  • Je doute carré que vous avez besoin d'une ligne, d'une fonction lambda, parce que je doute que vous avez besoin d'une ligne de fonction, et je doute que vous avez besoin d'une fonction lambda, par opposition à un nom de fonction. Quel est le point de l'utilisation d'un lambda si vous êtes immédiatement allez donner votre fonction, le nom de rate de toute manière?
  • Dommage que je ne peux +1 DSM fois... Mais pour faire clair: plus la chose à faire est de ne pas "prendre la décision prise à l'extérieur de la lambda fonctions", mais simplement de les définir comme des fonctions classiques en premier lieu. Vous pouvez stocker des fonctions classiques dans un tableau. Il n'y a rien de spécial à propos de lambdas; ils sont des fonctions plus limitées, pas de fonctions plus puissantes.
  • Bien la fonction nécessaire pour tenir dans une seule ligne, je ne pense pas que vous pourriez le faire avec une fonction nommée? Aussi ces fonctions sont stockées comme des chaînes de caractères qui sont ensuite évaluées à l'aide de "eval" dont je n'étais pas sûr de la façon de le faire avec des fonctions classiques.
  • Tout d'abord, pourquoi est-il nécessaire de tenir dans une seule ligne? Deuxièmement, pourquoi sont-ils stockés sous forme de chaînes, puis de les évaluer à l'aide de eval? Ceux sont tous les deux très mauvaises conditions. Je pense qu'il y est une XY problème ici, et si vous nous avez dit que vous étiez en train de faire, nous avons pu expliquer la bonne façon de le faire.
InformationsquelleAutor Nathan Bush | 2013-04-02