Im folgenden Code scheint func2
die __globals__
func1
+ auch die Symbole von contextlib
zu haben. Kann jemand ausarbeiten, wie diese globals
Verschmelzung funktioniert? IE, fusioniert es __dict__
's aller Module bei der Definition der Funktion beteiligt? Was passiert auch, wenn es einen Namenskonflikt gibt?"__globals__" wird zusammengeführt, wenn Dekoratoren verwendet werden?
import contextlib
def func1():
pass
@contextlib.contextmanager
def func2(args):
pass
globals1 = set(func1.__globals__.keys())
globals2 = set(func2.__globals__.keys())
globals2.difference(globals1)
{'GeneratorContextManager',
'__all__',
'__file__',
'closing',
'contextmanager',
'nested',
'warn',
'wraps'}
Python Mit 2.7.10
Was macht Sie denken, dass es beides hat? – BrenBarn
weil, wenn ich Satz Unterschied von zwei Mengen von __globals__ nehme ich Symbole aus 'contextlib.py' in der zweiten, aktualisierte Frage –
Das zeigt nur, dass' func1 .__ globals__' nicht diese Kontextlib-Namen hat; es zeigt nicht, dass 'func2 .__ globals__' *' 'func1' 'hat (und tatsächlich nicht). – BrenBarn