Wie kann ich sehen, dass eine Funktion aufgerufen wurde?

6 Antworten

Entweder gibt es Reflections, mit denen du auf den Aufrufstack zugreifen kannst oder du schreibst in jede erste Zeile einer Funktion ein Log. Wenn du wissen willst, ob und wann die Funktion aufgerufen wurde, liest du das Log.

Du kannst dir natürlich auch in einer Membervariable merken, ob eine Funktion aufgerufen wurde.

Woher ich das weiß:Berufserfahrung – Programmierer

Bei deinem Beispiel kannst du einfach das "number = number + 1" in die Funktion aufnehmen. Musst aber dran denken, dass du erst mit "global" sagen musst, dass die Funktion die globale number Variable benutzen soll:

number = 0

def function()
  print("Funktion!")
  global number
  number = number + 1

Wenn number größer als 0 ist, wurde die Funktion aufgerufen.

Du könntest eine Art Observer implementieren.

Dafür wird die Funktion, die beobachtet werden soll, als Methode eines Objekts implementiert. Dieses Objekt hält des Weiteren eine Referenz auf die Funktion, die als Reaktion auf den Methodenaufruf ausgeführt werden soll. Am Ende der zu beobachtenden Funktion wird sie aufgerufen.

class Handler:
  def __init__(self, callback):
    self.callback = callback

  def do_something(self):
    print("Do something")
    self.callback()

def count():
  global counter
  counter = counter + 1
  print(counter)

counter = 0
handler = Handler(count)
handler.do_something()

Noch eine kürzere Version dazu könnte man mit einem Lambda-Ausdruck erreichen:

def do_something_internal(callback):
  print("Do something")
  callback()

def count():
  # ...

counter = 0
do_something = lambda: do_something_internal(count)
do_something()

Noch einfacher, aber dafür weniger flexibler wäre der direkte Aufruf von count in do_something.

Innerhalb der Funktion: Da ist es ohnehin klar, dass sie ausgeführt wird - und daher aufgerufen wurde.

Außerhalb der Funktion: Wenn sich zuvor ein Befehl befindet, der die Funktion aufruft, dann wurde sie aufgerufen. Wenn du mitzählen möchtest, kannst du direkt vor oder nach dem Funktionsaufruf deinen Zähler erhöhen - oder auch innerhalb der Funktion eine statische Variable.

Aber eigentlich müsste man wissen, was du genau erreichen willst, dann gäbe es hilfreichere Antworten.

Du suchst offensichtlich einen Debugger.

Woher ich das weiß:Berufserfahrung – Software Entwickler / Devops