Die Doctest-Dokumentation hat a section about execution context. Meine Lesung ist, dass die Globals in dem Modul flach für die Tests in jedem Docstring kopiert werden, aber nicht zwischen Tests innerhalb eines Docstring zurückgesetzt werden.Ändern von globalen Variablen in Dokumententests
Auf der Grundlage dieser Beschreibung würde ich gedacht haben folgende Doctests passieren würde:
X = 1
def f():
"""Function F.
>>> X
1
>>> f()
2
>>> X
2
"""
global X
X = 2
return X
def g():
"""Function G.
>>> g()
1
>>> X
1
"""
return X
Aber stattdessen gehen die folgenden Tests!
X = 1
def f():
"""Function F.
>>> X
1
>>> f()
2
>>> X
1
"""
global X
X = 2
return X
def g():
"""Function G.
>>> g()
2
>>> X
1
"""
return X
Es scheint, als ob die Globals über Tests hinweg in Docstrings geteilt werden? Aber nur innerhalb Funktionsaufrufe?
Warum ist dies das resultierende Verhalten? Hat das etwas mit Funktionen zu tun, die ein globales Wörterbuch enthalten, das vom Ausführungskontext getrennt ist?