模块functools
是指reduce
中定义的_functools
。
同时_functools
引用partial
functools
我在尝试为猴子修补目的创建命名空间副本时遇到此问题。但在我的情况下,我需要旧的和猴子修补的功能,因此需要一个副本。有什么建议什么是这样的循环依赖的好方法?
使用Python 2.7.10
每个请求的一些源代码
def _get_dependent_modules(m):
"""Return set of all modules defining symbols in given module."""
modules = set()
for symbol_name, symbol in m.__dict__.items():
if hasattr(symbol, '__module__'):
if symbol.__module__ in sys.modules:
print "Symbol %s, defined in %s" % (symbol_name, symbol.__module__)
modules.add(sys.modules[symbol.__module__])
else:
print "Cant find module for %s" %(symbol)
return modules
_get_dependent_modules(functools)
Symbol wraps, defined in functools
Symbol partial, defined in functools
Symbol update_wrapper, defined in functools
Symbol total_ordering, defined in functools
Symbol reduce, defined in _functools
Symbol cmp_to_key, defined in functools
_get_dependent_modules(sys.modules["_functools"])
Symbol partial, defined in functools
Symbol reduce, defined in _functools
答案 0 :(得分:0)
到目前为止,您可以简单地记住您所看到的内容(identity comparison),而不是迭代或下降到您记得的内容中。
也许我不理解操作的复杂性(复制命名空间)。
只是一个建议:
sub scan_symbols(object):
for each member in object:
if member is of type-primitive:
whatever
if member is of type-object:
record member reference if not already recorded
if reference is new:
scan_symbols(member)
PHP中的真实代码示例:
https://raw.githubusercontent.com/pradosoft/prado/master/framework/Util/TVarDumper.php
这个也避免了圆形代表: