Considérez une fonction Python:
<class 'list'>: [<function testSetsFromStrings.<locals>.<listcomp>. <lambda> at 0x11cee5730>, <function testSetsFromStrings.<locals>.<listcomp>. <lambda> at 0x11cee5840>, <function testSetsFromStrings.<locals>.<listcomp>. <lambda> at 0x11cee58c8>, <function testSetsFromStrings.<locals>.<listcomp>. <lambda> at 0x11cee5950>, <function testSetsFromStrings.<locals>.<listcomp>. <lambda> at 0x11cee59d8>]
4 Réponses :
Peut-être que vous ne voulez pas de Lambdas du tout? Est-ce ce que vous voulez?
def testSetsFromStrings(tt): x1 = [my_function(x) for x in tt] return x1
Eh bien, j'ai eu une fonction à la place de la Lambda plus tôt. Je veux pouvoir invoquer une fonction ou une lambda. La logique indiquée est une représentation beaucoup plus simple de ce que je veux faire - pour simplement vous demander comment invoquer une Lambda ou une fonction.
Vous devrez expliquer votre situation complète.
Mise à jour de l'OP. Si nécessaire, je vais convertir le lambda code> en une fonction multi-étapes qui inclut des instructions (telles que
impression code>) pour illustrer que j'ai vraiment besoin de la question initiale.
J'ai mis à jour ma réponse: invoquer une fonction si vous en avez besoin.
ok - donc un lambda code> ne donne que sens / travail ici; C'est une application directe de la logique ou invoquer une fonction i>. C'est une explication acceptable. Je vais accepter cette réponse après la requis quelques minutes.
Vous pouvez également utiliser une fonction de carte au lieu d'une compréhension de la liste: si vous préférez la fonction LAMDA présentée. Ailleurs juste: p> comme mentionné des autres aussi. p> p>
Vous définissez la fonction, mais n'appliquez aucun argument à celui-ci:
Essayez cela à la place p> mais il serait préférable de simplement extraire la définition de la fonction En dehors de la compréhension si la fonction est compliquée, puis utilisez une carte ou une compréhension de la carte. P> P>
Qu'est-ce que vous devez comprendre, c'est que les Lambdas se comportent intrinsèquement eux-mêmes. Par conséquent, créez une fonction lambda et invoquez cela.
testSetsFromStrings = lambda x: x.split(' ') x1 = [testSetsFromStrings(t) for t in tt]
Quel est le comportement attendu?
Cela devrait fonctionner sans fonction ni lambda
[x.split (x.split ('') pour x dans tt] code>
Si vous pensez à cette compréhension ( pour chaque X en TT, renvoyez une nouvelle Lambda ... i>) Il devrait avoir un sens à vous pourquoi vous voyez ce que vous voyez ...
@Dawg peut-être, mais je ne sais pas comment structurer cela pour obtenir le résultat de l'évaluation d'une lambda ou d'une fonction.
Donc, vous voulez appliquer plusieurs fonctions à une ierrable?
Comme c'est le cas, votre code ne fait rien d'utile, il est donc difficile pour nous de dire quelle est la meilleure façon de le faire. Comme c'est le cas, les valeurs dans
tt code> sont complètement ignorées et que vous obtenez un tas de Lambdas qui font toutes la même chose. Que voulez-vous que le code fasse?
L'autonome
lambda x: x.split ('') code> définit uniquement une fonction lambda; Il n'appelle pas la fonction Lambda. Utilisez
mapper code> pour définir un appelable et l'appeler en une étape ou défini la fonction ou la Lambda à l'externe de la compréhension de la liste.
@Dawg YA THX - J'ai eu ça de la réponse acceptée
Il est étrange que
x code> est utilisé à 2 fins différentes - Argument de Lambda et variable d'itération. Si alors l'intention était de capturer la valeur éphémère de la compréhension
x code> dans une lambda, il n'est pas trivial: au lieu de
[lambda: x ** 2 pour x dans la plage (3)] # (= > 4,4,4) code> quelque chose comme
[functools.Partial (Lambda y = Aucun: y ** 2, y = x) pour x dans la plage (3)] # (=> 0, 1 , 4) code> est nécessaire.