gpt4 book ai didi

python - 复制命名空间时处理循环依赖(functools -> _functools -> functools)

转载 作者:太空狗 更新时间:2023-10-30 01:37:25 25 4
gpt4 key购买 nike

模块functools 引用reduce 定义在_functools 中。同时 _functools 指的是在 functools

中定义的 partial

我在尝试为猴子修补目的创建命名空间副本时遇到了这个问题。但就我而言,我需要旧功能和猴子补丁功能,因此需要一份副本。有什么建议可以像这样循环依赖吗?

使用 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

最佳答案

您可以简单地记住到目前为止所看到的内容 (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

这个也避免了循环依赖:

https://github.com/symfony/var-dumper

关于python - 复制命名空间时处理循环依赖(functools -> _functools -> functools),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37366039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com