Datum als Wert in einer Liste

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
viechdokter
User
Beiträge: 42
Registriert: Samstag 11. Dezember 2021, 20:52

Python bietet doch immer wieder neue unerwartete Überraschungen! Ich wollte eine Liste mit Datumsangaben füllen. Hier mein kleines Programm:

Code: Alles auswählen

import datetime
date_list = []
start_date = '01/01/20'
start_date1 = datetime.datetime.strptime(start_date, "%m/%d/%y")
for x in range (1,70):
        q = (start_date1 + datetime.timedelta (days = x))
        print (q)
        date_list.append(q)
print(date_list)
print ('finished')
Die Anweisung print (q) macht genau, was ich will. Jeder q-Wert ist ein Datum:

2020-01-02 00:00:00
2020-01-03 00:00:00
2020-01-04 00:00:00
2020-01-05 00:00:00
usw


Die erzeugte date_list sieht allerdings anders aus:

[datetime.datetime(2020, 1, 2, 0, 0), datetime.datetime(2020, 1, 3, 0, 0), datetime.datetime(2020, 1, 4, 0, 0), usw... ]

Warum? Ich glaube, es gibt wahrscheinlich wieder viele pythonische Wege, es einfacher zu machen, aber warum wird q hier geändert?
Zuletzt geändert von viechdokter am Montag 13. Dezember 2021, 11:55, insgesamt 1-mal geändert.
Python..., wie sage ich das jetzt am besten...?
Es liegt nicht an dir. Es liegt an mir...!
Benutzeravatar
viechdokter
User
Beiträge: 42
Registriert: Samstag 11. Dezember 2021, 20:52

PS: die drei Zeilen nach der for Anweisung sind natürlich eingerückt. Der Editor zeigt es nur nicht an.
Python..., wie sage ich das jetzt am besten...?
Es liegt nicht an dir. Es liegt an mir...!
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

Es wird nichts geändert. Es handelt sich um die gleichen Objekte. Lediglich die Darstellung ist anders. Wird ein Objekt direkt ausgegeben, wird die in __str__ implementierte Darstellung verwendet. In "Sammelobjekten", wie z. B. einer Liste, wir dann die in __repr__ implementierte Darstellung verwendet. Eine zusammenfassende Erklärung findest du z. B. hier https://stackoverflow.com/questions/143 ... r-and-repr.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

viechdokter hat geschrieben: Montag 13. Dezember 2021, 11:44 PS: die drei Zeilen nach der for Anweisung sind natürlich eingerückt. Der Editor zeigt es nur nicht an.
Dazu bitte die Code Tags verwenden. Das ist der </> Knopf im vollständigen Editor.
Sirius3
User
Beiträge: 18278
Registriert: Sonntag 21. Oktober 2012, 17:20

Für Code gibt es hier im Forum Code-Tags (</>-Knopf), dann stimmen auch die Einrückungen.

Was macht start_date1 einsiger als start_date? Typen haben in Variablennamen nichts zu suchen, also `dates` statt `date_list`.
`x` ist ein schlechter Name für eine Anzahl an Tagen.
Vor der öffnenden Klammer eines Funktionsaufrufs kommt kein Leerzeichen. Die Klammern um die +-Operation sind unnötig.
`q` ist dann wieder ein schlechter Name für ein Datum.
Das was Du da siehst, ist die Repräsentation einer Liste, die jeweils die Repräsentationen eines Datumobjekts enthalten. Diese Darstellung ist zu Debuggingzwecken da, damit man genau weiß, mit was für Objekten man es hier zu tun hat.
Willst Du die Liste ausgeben, mußt Du über die Liste iterieren und jeweils das Datumsobjekt in der Form, in der Du es haben möchtest formatieren.
Benutzeravatar
viechdokter
User
Beiträge: 42
Registriert: Samstag 11. Dezember 2021, 20:52

Danke für all die Antworten! Den Code-tag habe ich inzwischen gefunden. Ich weiß, daß meine Variablennamen nicht besonders clever waren. Es ging nur um einen schnellen und schmutzigen "Proof of concept". Der leider fehlgeschlagen ist. Die Geschichte mit __str__ und __repr__ geht leider im Moment noch weit über mein Niveau hinaus. (Trotzdem danke für den pointer! Irgendwann verstehe ich es wahrscheinlich...) Würde es vielleicht Sinn machen, diese "Datumsobjekte" erst in Strings umzuwandeln und dann erst in die Liste zu schreiben?
Python..., wie sage ich das jetzt am besten...?
Es liegt nicht an dir. Es liegt an mir...!
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Das kommt darauf an, was du damit machen möchtest.
Sirius3
User
Beiträge: 18278
Registriert: Sonntag 21. Oktober 2012, 17:20

@viechdokter: das mit __str__ und __repr__ ist hier auch gar nicht relevant. Was relevant ist, ist die Tatsache, dass ein `print(liste)` nichts ist, was in einem normalen Programm vorkommt, sondern nur der Fehlersuche dient. Und in diesem Sinne ist es nicht sinnvoll, Deine Datumsobjekte in Strings umzuwandeln, denn das löst ja die Ausgabe von mehreren Dingen nicht.
Benutzeravatar
viechdokter
User
Beiträge: 42
Registriert: Samstag 11. Dezember 2021, 20:52

@Sirius3 es geht mir eigentlich nicht wirklich um das Ausdrucken der Liste - das habe ich wirklich nur gemacht, um zu sehen, ob meine Liste das enthält, was ich versucht habe, hineinzuschreiben. Letztlich möchte ich zwei Listen zu einem dictionary zusammenzippen und dann mit den dictionary keys Werte vergleichen. Wenn ich jetzt so ein datetime Objekt mit einem anderen Datums-String vergleichen will, erwarte ich mal wieder ein Traceback... Ich habe mir inzwischen mit strftime geholfen, was wahrscheinlich zum Vergleich mit anderen Strings funktionieren wird.

So sieht das Programm jetzt aus:

Code: Alles auswählen

import datetime
date_list = []
date_dictionary = {}
start_date = '01/01/20'
start_date1 = datetime.datetime.strptime(start_date, "%m/%d/%y")
for x in range (1,70):
    q = (start_date1 + datetime.timedelta (days = x))
    print (q)
    q = q.strftime('%m/%d/%Y')
    date_list.append(q)
print (date_list)
print ('finished')
Und der Listenausdruck sieht so aus, wie ich ihn eigentlich haben wollte:

['01/02/2020', '01/03/2020', '01/04/2020', '01/05/2020',...]
Python..., wie sage ich das jetzt am besten...?
Es liegt nicht an dir. Es liegt an mir...!
Sirius3
User
Beiträge: 18278
Registriert: Sonntag 21. Oktober 2012, 17:20

Jetzt hast Du es genau falsch herum gemacht. Statt ein Datumsobjekt, das man wunderbar für Vergleiche nutzen kann, in einen String umzuwandeln, wäre der richtige Weg, alles was als Datumsstring ins Programm kommt, erst einmal in eine Datumsobjekt umzuwandeln.
Benutzeravatar
__blackjack__
User
Beiträge: 14077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@viechdokter: Den Umweg über ein Datum als Zeichenkette muss man bei dem Beispiel ja gar nicht gehen. So wird man die 1 im Namen los ohne sich Gedanken darüber machen zu müssen.

Statt `print()` würde ich etwas wie das externe `icecream`-Modul oder Logging empfehlen. Da auch gerne das externe `loguru` statt `logging` aus der Standardbibliothek wenn es um Programme/Skripte/Dienste geht.

`icecream`\s `ic`-Objekt hat zum ersten den Vorteil, das die Ausgabe durch das vorangestellte "ic|" leichter als Debugausgabe erkannt wird.

Und es wird auch ausgegeben von *was* das der Wert ist, also welcher (Teil)Ausdruck dazu geführt hat.

Und der Wert wird „pretty print“-formatiert, mit Syntaxhighlighting.

Und `ic()` gibt den/die übergebene(n) Wert(e) auch zurück, dass heisst man kann das im Gegensatz zu `print()`, was ja immer `None` zurück gibt, mitten in irgendwelche Ausdrücke rein schreiben. Wenn man mit `print()` das Ergebnis von einem Teilausdruck zur Fehlersuche ausgeben will, muss man den Code erst so umschreiben, dass der Teilausdruck entweder noch mal in den `print()`-Aufruf kopiert wird. Das birgt die Gefahr, dass man bei Code mit Seiteneffekten nun die Bedeutung verändert hat. Oder man muss den Ausdruck heraus ziehen und an einen Namen binden, damit man zwischendurch `print()` damit aufrufen kann. Und hinterher muss man das alles zurück ändern. Macht zusätzliche Arbeit und dabei können dann auch Fehler passieren.

Man kann die ``for``-Schleife also zu der „list comprehension“ umformen die sie eigentliche sein möchte, trotzdem die einzelnen, erstellten Werte ausgeben lassen, und dabei sogar noch mehr Informationen in der Ausgabe haben.

Code: Alles auswählen

#!/usr/bin/env python3
from datetime import datetime as DateTime, timedelta as TimeDelta
from pprint import pprint

from icecream import ic


def main():
    start_date = DateTime(2020, 1, 1)
    dates = [ic(start_date + TimeDelta(days=days)) for days in range(1, 70)]
    pprint(dates)
    print("finished")


if __name__ == "__main__":
    main()
Ausgabe:

Code: Alles auswählen

ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 2, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 3, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 4, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 5, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 6, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 7, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 8, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 9, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 10, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 11, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 12, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 13, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 14, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 15, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 16, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 17, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 18, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 19, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 20, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 21, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 22, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 23, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 24, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 25, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 26, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 27, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 28, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 29, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 30, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 1, 31, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 1, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 2, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 3, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 4, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 5, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 6, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 7, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 8, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 9, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 10, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 11, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 12, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 13, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 14, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 15, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 16, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 17, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 18, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 19, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 20, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 21, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 22, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 23, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 24, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 25, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 26, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 27, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 28, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 2, 29, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 3, 1, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 3, 2, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 3, 3, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 3, 4, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 3, 5, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 3, 6, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 3, 7, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 3, 8, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 3, 9, 0, 0)
ic| start_date + TimeDelta(days=days): datetime.datetime(2020, 3, 10, 0, 0)
[datetime.datetime(2020, 1, 2, 0, 0),
 datetime.datetime(2020, 1, 3, 0, 0),
 datetime.datetime(2020, 1, 4, 0, 0),
 datetime.datetime(2020, 1, 5, 0, 0),
 datetime.datetime(2020, 1, 6, 0, 0),
 datetime.datetime(2020, 1, 7, 0, 0),
 datetime.datetime(2020, 1, 8, 0, 0),
 datetime.datetime(2020, 1, 9, 0, 0),
 datetime.datetime(2020, 1, 10, 0, 0),
 datetime.datetime(2020, 1, 11, 0, 0),
 datetime.datetime(2020, 1, 12, 0, 0),
 datetime.datetime(2020, 1, 13, 0, 0),
 datetime.datetime(2020, 1, 14, 0, 0),
 datetime.datetime(2020, 1, 15, 0, 0),
 datetime.datetime(2020, 1, 16, 0, 0),
 datetime.datetime(2020, 1, 17, 0, 0),
 datetime.datetime(2020, 1, 18, 0, 0),
 datetime.datetime(2020, 1, 19, 0, 0),
 datetime.datetime(2020, 1, 20, 0, 0),
 datetime.datetime(2020, 1, 21, 0, 0),
 datetime.datetime(2020, 1, 22, 0, 0),
 datetime.datetime(2020, 1, 23, 0, 0),
 datetime.datetime(2020, 1, 24, 0, 0),
 datetime.datetime(2020, 1, 25, 0, 0),
 datetime.datetime(2020, 1, 26, 0, 0),
 datetime.datetime(2020, 1, 27, 0, 0),
 datetime.datetime(2020, 1, 28, 0, 0),
 datetime.datetime(2020, 1, 29, 0, 0),
 datetime.datetime(2020, 1, 30, 0, 0),
 datetime.datetime(2020, 1, 31, 0, 0),
 datetime.datetime(2020, 2, 1, 0, 0),
 datetime.datetime(2020, 2, 2, 0, 0),
 datetime.datetime(2020, 2, 3, 0, 0),
 datetime.datetime(2020, 2, 4, 0, 0),
 datetime.datetime(2020, 2, 5, 0, 0),
 datetime.datetime(2020, 2, 6, 0, 0),
 datetime.datetime(2020, 2, 7, 0, 0),
 datetime.datetime(2020, 2, 8, 0, 0),
 datetime.datetime(2020, 2, 9, 0, 0),
 datetime.datetime(2020, 2, 10, 0, 0),
 datetime.datetime(2020, 2, 11, 0, 0),
 datetime.datetime(2020, 2, 12, 0, 0),
 datetime.datetime(2020, 2, 13, 0, 0),
 datetime.datetime(2020, 2, 14, 0, 0),
 datetime.datetime(2020, 2, 15, 0, 0),
 datetime.datetime(2020, 2, 16, 0, 0),
 datetime.datetime(2020, 2, 17, 0, 0),
 datetime.datetime(2020, 2, 18, 0, 0),
 datetime.datetime(2020, 2, 19, 0, 0),
 datetime.datetime(2020, 2, 20, 0, 0),
 datetime.datetime(2020, 2, 21, 0, 0),
 datetime.datetime(2020, 2, 22, 0, 0),
 datetime.datetime(2020, 2, 23, 0, 0),
 datetime.datetime(2020, 2, 24, 0, 0),
 datetime.datetime(2020, 2, 25, 0, 0),
 datetime.datetime(2020, 2, 26, 0, 0),
 datetime.datetime(2020, 2, 27, 0, 0),
 datetime.datetime(2020, 2, 28, 0, 0),
 datetime.datetime(2020, 2, 29, 0, 0),
 datetime.datetime(2020, 3, 1, 0, 0),
 datetime.datetime(2020, 3, 2, 0, 0),
 datetime.datetime(2020, 3, 3, 0, 0),
 datetime.datetime(2020, 3, 4, 0, 0),
 datetime.datetime(2020, 3, 5, 0, 0),
 datetime.datetime(2020, 3, 6, 0, 0),
 datetime.datetime(2020, 3, 7, 0, 0),
 datetime.datetime(2020, 3, 8, 0, 0),
 datetime.datetime(2020, 3, 9, 0, 0),
 datetime.datetime(2020, 3, 10, 0, 0)]
finished
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
viechdokter
User
Beiträge: 42
Registriert: Samstag 11. Dezember 2021, 20:52

Sirius3 hat geschrieben: Montag 13. Dezember 2021, 14:26 Jetzt hast Du es genau falsch herum gemacht. Statt ein Datumsobjekt, das man wunderbar für Vergleiche nutzen kann, in einen String umzuwandeln, wäre der richtige Weg, alles was als Datumsstring ins Programm kommt, erst einmal in eine Datumsobjekt umzuwandeln.
Ah, okay, so rum wäre es natürlich auch möglich... :lol: Ich werde wohl noch ein Weilchen brauchen, bis mir so einfache Dinge selber einfallen. Danke dir!
Python..., wie sage ich das jetzt am besten...?
Es liegt nicht an dir. Es liegt an mir...!
Benutzeravatar
__blackjack__
User
Beiträge: 14077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Noch etwas mächtiger als `icecream` wäre `snoop`, das ganz einfach den Ablauf einer ganzen Funktion protokollieren kann:

Code: Alles auswählen

#!/usr/bin/env python3
from datetime import datetime as DateTime, timedelta as TimeDelta
from pprint import pprint

from snoop import snoop


@snoop
def main():
    start_date = DateTime(2020, 1, 1)
    dates = [start_date + TimeDelta(days=days) for days in range(1, 70)]
    pprint(dates)
    print("finished")


if __name__ == "__main__":
    main()
Ausgabe:

Code: Alles auswählen

15:24:52.45 >>> Call to main in File "forum21.py", line 9
15:24:52.45    9 | def main():
15:24:52.45   10 |     start_date = DateTime(2020, 1, 1)
15:24:52.45 .......... start_date = datetime.datetime(2020, 1, 1, 0, 0)
15:24:52.45   11 |     dates = [start_date + TimeDelta(days=days) for days in range(1, 70)]
    15:24:52.45 List comprehension:
    15:24:52.45   11 |     dates = [start_date + TimeDelta(days=days) for days in range(1, 70)]
    15:24:52.45 .......... Iterating over <range_iterator object at 0x7f377d930c30>
    15:24:52.45 .......... Values of start_date: datetime.datetime(2020, 1, 1, 0, 0)
    15:24:52.45 .......... Values of days: 1, 2, 3, 4, 5, ..., 65, 66, 67, 68, 69                                                                               
    15:24:52.45 Result: [datetime.datetime(2020, 1, 2, 0, 0), datetime.datetime(2020, 1, 3, 0, 0), datetime.datetime(2020, 1, 4, 0, 0), ..., datetime.datetime(2020, 3, 8, 0, 0), datetime.datetime(2020, 3, 9, 0, 0), datetime.datetime(2020, 3, 10, 0, 0)]
15:24:52.45   11 |     dates = [start_date + TimeDelta(days=days) for days in range(1, 70)]
15:24:52.45 .......... dates = [datetime.datetime(2020, 1, 2, 0, 0), datetime.datetime(2020, 1, 3, 0, 0), datetime.datetime(2020, 1, 4, 0, 0), ..., datetime.datetime(2020, 3, 8, 0, 0), datetime.datetime(2020, 3, 9, 0, 0), datetime.datetime(2020, 3, 10, 0, 0)]
15:24:52.45 .......... len(dates) = 69
15:24:52.45   12 |     pprint(dates)
[datetime.datetime(2020, 1, 2, 0, 0),
 datetime.datetime(2020, 1, 3, 0, 0),
 datetime.datetime(2020, 1, 4, 0, 0),
 datetime.datetime(2020, 1, 5, 0, 0),
 datetime.datetime(2020, 1, 6, 0, 0),
 datetime.datetime(2020, 1, 7, 0, 0),
 datetime.datetime(2020, 1, 8, 0, 0),
 datetime.datetime(2020, 1, 9, 0, 0),
 datetime.datetime(2020, 1, 10, 0, 0),
 datetime.datetime(2020, 1, 11, 0, 0),
 datetime.datetime(2020, 1, 12, 0, 0),
 datetime.datetime(2020, 1, 13, 0, 0),
 datetime.datetime(2020, 1, 14, 0, 0),
 datetime.datetime(2020, 1, 15, 0, 0),
 datetime.datetime(2020, 1, 16, 0, 0),
 datetime.datetime(2020, 1, 17, 0, 0),
 datetime.datetime(2020, 1, 18, 0, 0),
 datetime.datetime(2020, 1, 19, 0, 0),
 datetime.datetime(2020, 1, 20, 0, 0),
 datetime.datetime(2020, 1, 21, 0, 0),
 datetime.datetime(2020, 1, 22, 0, 0),
 datetime.datetime(2020, 1, 23, 0, 0),
 datetime.datetime(2020, 1, 24, 0, 0),
 datetime.datetime(2020, 1, 25, 0, 0),
 datetime.datetime(2020, 1, 26, 0, 0),
 datetime.datetime(2020, 1, 27, 0, 0),
 datetime.datetime(2020, 1, 28, 0, 0),
 datetime.datetime(2020, 1, 29, 0, 0),
 datetime.datetime(2020, 1, 30, 0, 0),
 datetime.datetime(2020, 1, 31, 0, 0),
 datetime.datetime(2020, 2, 1, 0, 0),
 datetime.datetime(2020, 2, 2, 0, 0),
 datetime.datetime(2020, 2, 3, 0, 0),
 datetime.datetime(2020, 2, 4, 0, 0),
 datetime.datetime(2020, 2, 5, 0, 0),
 datetime.datetime(2020, 2, 6, 0, 0),
 datetime.datetime(2020, 2, 7, 0, 0),
 datetime.datetime(2020, 2, 8, 0, 0),
 datetime.datetime(2020, 2, 9, 0, 0),
 datetime.datetime(2020, 2, 10, 0, 0),
 datetime.datetime(2020, 2, 11, 0, 0),
 datetime.datetime(2020, 2, 12, 0, 0),
 datetime.datetime(2020, 2, 13, 0, 0),
 datetime.datetime(2020, 2, 14, 0, 0),
 datetime.datetime(2020, 2, 15, 0, 0),
 datetime.datetime(2020, 2, 16, 0, 0),
 datetime.datetime(2020, 2, 17, 0, 0),
 datetime.datetime(2020, 2, 18, 0, 0),
 datetime.datetime(2020, 2, 19, 0, 0),
 datetime.datetime(2020, 2, 20, 0, 0),
 datetime.datetime(2020, 2, 21, 0, 0),
 datetime.datetime(2020, 2, 22, 0, 0),
 datetime.datetime(2020, 2, 23, 0, 0),
 datetime.datetime(2020, 2, 24, 0, 0),
 datetime.datetime(2020, 2, 25, 0, 0),
 datetime.datetime(2020, 2, 26, 0, 0),
 datetime.datetime(2020, 2, 27, 0, 0),
 datetime.datetime(2020, 2, 28, 0, 0),
 datetime.datetime(2020, 2, 29, 0, 0),
 datetime.datetime(2020, 3, 1, 0, 0),
 datetime.datetime(2020, 3, 2, 0, 0),
 datetime.datetime(2020, 3, 3, 0, 0),
 datetime.datetime(2020, 3, 4, 0, 0),
 datetime.datetime(2020, 3, 5, 0, 0),
 datetime.datetime(2020, 3, 6, 0, 0),
 datetime.datetime(2020, 3, 7, 0, 0),
 datetime.datetime(2020, 3, 8, 0, 0),
 datetime.datetime(2020, 3, 9, 0, 0),
 datetime.datetime(2020, 3, 10, 0, 0)]
15:24:52.45   13 |     print("finished")
finished
15:24:52.45 <<< Return value from main: None
Die Ausgabe im Terminal ist auch farbig. Und man kann `snoop` auch als Kontextmanager verwenden, wenn man nur einen bestimmten Teil in einer Funktion verfolgen lassen möchte, und es gibt mit `snoop.pp()` eine Funktion die ähnlich wie `icecream.ic()` funktioniert, wenn man noch weniger als einen Zeilenblock protokolliert haben möchte.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
viechdokter
User
Beiträge: 42
Registriert: Samstag 11. Dezember 2021, 20:52

__blackjack__ hat geschrieben: Montag 13. Dezember 2021, 15:32 Noch etwas mächtiger als `icecream` wäre `snoop`, das ganz einfach den Ablauf einer ganzen Funktion protokollieren kann:
...
Danke! Werde ich mir auch bald mal genauer anschauen.
Python..., wie sage ich das jetzt am besten...?
Es liegt nicht an dir. Es liegt an mir...!
Antworten