Załóżmy, że chcę wygenerować funkcję, która zostanie później włączona w zestaw równań do rozwiązania za pomocą funkcji scipy nsolve. Chcę utworzyć funkcję tak:Dynamicznie buduj funkcję lambda w pythonie
xi + xi + 1 + xi + 3 = 1
w którym liczba zmiennych będzie zależna od liczby komponentów. Na przykład, jeśli mają 2 składniki:
f = lambda x: x[0] + x[1] - 1
do 3:
f = lambda x: x[0] + x[1] + x[2] - 1
określić elementy w postaci tablicy w ciągu argumentów funkcji nazywać:
def my_func(components):
for component in components:
.....
.....
return f
Nie mogę po prostu znaleźć sposobu na zrobienie tego. Mam być w stanie zrobić to w ten sposób, jak tę funkcję i inne funkcje muszą być rozwiązywane wspólnie z nsolve:
x0 = scipy.optimize.fsolve(f, [0, 0, 0, 0 ....])
Każda pomoc będzie mile widziane
Dzięki!
Ponieważ nie jestem pewien, co jest najlepszym sposobem osiągnięcia tego celu będę w pełni wyjaśnić, co usiłuję zrobić:
-Jestem próbuje wygenerować to dwie funkcje, aby być później nsolved:
Więc chcę stworzyć Teste funkcyjny ([lista komponentów]), które mogą mi wrócić te dwa równania (Psat (T) jest funkcją, którą mogę wywołać w zależności od komponentu, a P jest stałą (wartość = 760)).
przykład:
teste(['Benzene','Toluene'])
powróci:
xBenzene + xToluene = 1
xBenzene PSAT ('benzen') + xToluene PSAT ('toluen') = 760
w przypadku połączenia:
teste(['Benzene','Toluene','Cumene'])
że powróci:
xBenzene + xToluene + xCumene = 1
xBenzene PSAT ('benzenu') + xToluene PSAT ('toluen') + xCumene * PSAT ('kumenu') = 760
Wszystkie te wartości x nie są czymś, co mogę obliczyć i zamienić na listę, którą mogę zsumować. Są to zmienne, które są tworzone w zależności od liczby komponentów, które mam w systemie ...
Nadzieja to pomaga znaleźć najlepszy sposób na osiągnięcie tego
Nie używaj lambda? – Ryan
To pachnie jak [problem XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Co dokładnie próbujesz zrobić, to sprawia, że myślisz, że dynamiczne budowanie funkcji lambda jest częścią odpowiedzi, lub że włączenie liczby komponentów zamiast ich powtarzania jest częścią odpowiedzi? Prawdopodobnie jest lepszy sposób na zrobienie tego. – abarnert
Ponadto wiele osób, które zadają tego rodzaju pytania, wydaje się myśleć, że jest coś specjalnego w funkcjach lambda. Tam nie ma. Nie ma nawet czegoś takiego jak "funkcja lambda". Funkcja jest funkcją, zdefiniowaną przez 'lambda' lub' def'. – abarnert