Quelle est la différence pour python entre lambda et la fonction régulière?

je suis curieux de savoir la différence entre lambda fonction et une fonction régulière (défini avec def) - au niveau python. (Je sais quelle est la différence pour les programmeurs et quand les utiliser.)

>>> def a():
    return 1

>>> b = lambda: 1
>>> a
<function a at 0x0000000004036F98>
>>> b
<function <lambda> at 0x0000000004031588>

Comme on peut le voir - python le saitb est un lambda function a est une fonction régulière. pourquoi est-ce? quelle est la différence entre à python<!--10?

31
demandé sur slallum 2012-09-04 17:44:55

4 réponses

ils sont du même type donc ils sont traités de la même manière:

>>> type(a)
<type 'function'>
>>> type(b)
<type 'function'>

Python sait aussi que b a été défini comme une fonction lambda et il définit que comme le nom de la fonction:

>>> a.func_name
'a'
>>> b.func_name
'<lambda>'

en d'autres termes, cela influence le nom que la fonction aura mais en ce qui concerne Python, les deux sont des fonctions qui peuvent être utilisées de la même manière. Voir le commentaire de mgilson ci-dessous pour une différence importante entre les fonctions et les fonctions lambda concernant le décapage.

27
répondu Simeon Visser 2012-09-04 13:53:59

la seule différence est que (a) le corps d'un lambda peut se composer d'une seule expression, dont le résultat est retourné de la fonction créée et (b) Un lambda expression est une expression qui renvoie un objet de fonction, tandis qu'un def déclaration n'a aucune valeur, et crée un objet de fonction et le lie à un nom.

à tous les autres égards importants, ils aboutissent à des objets identiques - les mêmes règles de portée et de saisie s'appliquent. (Immatériels différences sont que lambda - les fonctions créées ont une valeur par défaut func_name"<lambda>". Cela peut affecter le fonctionnement dans les cas ésotériques - par exemple, les tentatives de fonctions de décapage.).

11
répondu Marcin 2012-09-04 14:11:11

lambda créer une fonction anonyme. Cette idée a été reprise des langages de programmation fonctionnels. De cette façon, vous pouvez créer et passer la fonction à d'autres fonctions comme map et filter. ( regardez ici )

Vous pouvez passer des fonctions normales à ces fonctions aussi, mais puisque la plupart du temps leur simple et ils ont utilisé nulle part ailleurs, il est gênant de passer à l'ensemble du processus de définition d'une nouvelle fonction.

Comme un exemple de prendre un regardez ceci :

>>> a = [1, 2, 3, 4]
>>> print map( lambda x : x*2 + 1, a )
[3, 5, 7, 9, 11]
0
répondu Rsh 2012-09-04 14:01:23

Lambda est une fonction en ligne où nous pouvons faire n'importe quelle fonctionnalité sans nom de fonction. Il est utile quand on l'utilise comme argument d'une fonction d'ordre supérieur. Par exemple: une fonction qui prend d'autres fonctions comme arguments.

exemple de définition de fonction:

>>> def func(a, b):
    return a * b

>>> func(2,3)
6
>>> type(func)
<class 'function'>
>>> func
<function func at 0x034B6E88>
>>> multiply = lambda a, b: a * b
>>> multiply(2, 3)
6
>>> type(multiply)
<class 'function'>
>>> multiply
<function <lambda> at 0x034B6ED0>

les deux retourne la même valeur de sortie. Seuls les objets retournés sont différents. nom "func" pour la fonction et pour Lambda.

0
répondu Dinesh Khanna V 2018-09-10 13:06:19