@hell: Funktionen sind wie alles was man in Python an einen Namen binden kann Objekte. Also Werte. Damit kann man alles machen was man auch mit anderen Objekten machen kann – an andere Namen binden, als Argumente bei Aufrufen übergeben, in Datenstrukturen wie Listen oder Wörterbücher stecken, …
Es dürfte dafür keine gesonderte Überschrift geben, denn mehr gibt es dazu ja eigentlich nicht zu sagen. Es gibt einen Haufen Funktionen die Funktionen als Argumente erwarten (`map()`, `filter()`, …) und auch welche die Funktionen als Rückgabewerte haben (`functools`-Modul, `operator`-Modul, …) und im `operator`-Modul gibt es für jeden Operator den die Python-Syntax kennt, eine Funktion, falls man so etwas irgendwo zum Übergeben an andere Funktionen braucht.
Und ``lambda``-Ausdrücke sind in dem Zusammenhang noch interessant, wenn man eine einfache Funktion braucht, für die man nicht extra eine Funktion mit Namen definieren möchte.
Steering path following
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
hallo _deets_ und _blackjack_
danke für eure Antworten .
Was mich halt ziemlich verblüfft hat, war, dass im Beispiel von _deets_
nur der Name der Funktion zugewiesen wurde ( und nicht der gesamte 'Funktionsausdruck ' : strategy_a(i) ) ,
und wie ihr sagt damit an einen anderen Namen gebunden wurde.
Mit der Zuweisung: current_strategy = strategy_a wird also eine Referenz
auf strategy_a(i) erstellt?
danke für eure Antworten .
Was mich halt ziemlich verblüfft hat, war, dass im Beispiel von _deets_
nur der Name der Funktion zugewiesen wurde ( und nicht der gesamte 'Funktionsausdruck ' : strategy_a(i) ) ,
und wie ihr sagt damit an einen anderen Namen gebunden wurde.
Mit der Zuweisung: current_strategy = strategy_a wird also eine Referenz
auf strategy_a(i) erstellt?
Nein, NICHT auf strategy_a(i). Woher soll denn das i kommen in dem Ausdruck "current_strategy = strategy_a"? Sowas kann man auch machen, das sieht dann aber anders aus.
Alles was da passiert ist, dass das callable, das du gerade unter dem Namen strategy_a finden kannst an einen anderen Namen gebunden wird. Du kannst auch
machen. Dann hast du halt 7 anderen Namen, unter denen es zu finden ist.
Alles was da passiert ist, dass das callable, das du gerade unter dem Namen strategy_a finden kannst an einen anderen Namen gebunden wird. Du kannst auch
Code: Alles auswählen
foo = bar = pille = palle = furz = egal = das_objekt_formerly_known_as_strategy_a = strategy_a
ok _deets_ , ein letztes mal möchte ich deine wertvolle Zeit in Anspruch nehmen und poste diesen (nicht funktionierenden) Code zum Ausgangsproblem. Dabei habe ich dein Beispiel eins als Vorlage verwendet.
In meiner ersten Version wurde mit: distance <= 10: curren_node += 1 von node zu node iteriert. range iteriert ebenfalls über die Nodeliste,
ich habe keine Ahnung, wie das alles funktioniert.
An dieser Stelle will ich mich bei bei dir bedanken für deine Hilfe und Geduld, tolles Forum.
Code: Alles auswählen
def follow_path(self, path):
target = vec2d(0,0)
path.nodes = path.get_nodes()
self.seek_function = self.seek
for i in range(len(path.nodes)):
target = path.nodes[i]
distance = self.location.get_distance(target)
if i >= len(path.nodes)-1:
print(i)
self.seek_function = self.seek_with_approach
self.seek_function(i)
In meiner ersten Version wurde mit: distance <= 10: curren_node += 1 von node zu node iteriert. range iteriert ebenfalls über die Nodeliste,
ich habe keine Ahnung, wie das alles funktioniert.
An dieser Stelle will ich mich bei bei dir bedanken für deine Hilfe und Geduld, tolles Forum.
Oder anders gefragt: was ist dem Algorithmus nach das Kriterium den nächsten Knoten zu nehmen. Ist dieses Kriterium durch deine for Schleife erfüllt? Und ist dir klar, das mein Beispiel ein Beispiel war, und das Umschalten von Strategien darzustellen? Und NICHT voll umfänglich eine Implementierung für dein eigentliches Problem?
hallo _deets_ ,
ich glaube du musst dir keine Mühe mehr geben, ich raffe es noch nicht.
Ich hatte mir das auch schon gedacht, dass die Methode ja ca. 60 mal/ sec aufgerufen wird, range auch.
Ich werde in nächster Zeit über deine Tipps und Ideen noch einmal genauer nachdenken. Für jetzt bin ich an meinen Grenzen angelangt.
ich glaube du musst dir keine Mühe mehr geben, ich raffe es noch nicht.
Ich hatte mir das auch schon gedacht, dass die Methode ja ca. 60 mal/ sec aufgerufen wird, range auch.
Ich werde in nächster Zeit über deine Tipps und Ideen noch einmal genauer nachdenken. Für jetzt bin ich an meinen Grenzen angelangt.