Wie übergebe ich eine zufällige Funktion als Argument?

8

Python ist so flexibel, dass ich Funktionen als Elemente von Listen oder Argumenten anderer Funktionen verwenden kann. Zum Beispiel:

%Vor%

oder

%Vor%

Es ist mir jedoch nicht klar, wie ich das gleiche mit zufälligen Funktionen machen soll. Zum Beispiel möchte ich Gaußsche Verteilungen verwenden: [random.normalvariate(3.0, 2.0), random.normalvariate(1.0, 4.0)] . In diesem Beispiel erhalte ich eine feste Liste mit zwei Elementen. Aber was ich bekommen möchte, ist eine Liste mit zufälligen Elementen. Was ist ein guter Weg, um es in Python zu tun?

    
Roman 11.03.2013, 09:18
quelle

3 Antworten

8

Probieren Sie es mit lambda Funktionen:

aus %Vor%

Sie sehen den Unterschied in Klammern. sin ist eine Funktion, sin(x) ist der Rückgabewert dieser Funktion. Da Sie keine Funktion ohne Klammern erstellen können, die random.normalvariate(1.0, 4.0) darstellen, müssen Sie sie als Lambda-Funktion definieren.

    
eumiro 11.03.2013, 09:23
quelle
7

Verwenden Sie functools.partial oder lambda

Das sind im Grunde die gleichen:

%Vor%

Sie sind beide äquivalent zu:

%Vor%

partial ist flexibler, gibt Ihnen eine viel bessere Kontrolle über die Erstellung von _function und lässt Sie Lambda-Syntax-Unordnung vermeiden.

Es gab übrigens einige Kontroversen über Lambda in der Python-Community, aber am Ende gab Guido zu, dass Eine überlegene Alternative zum Lambda-Ausdruck zu finden, ist" eine unmögliche Aufgabe ".

    
Jakub M. 11.03.2013 09:23
quelle
5

Sie sollten partielle von functools verwenden:

%Vor%     
Simon 11.03.2013 09:33
quelle

Tags und Links