我有一段PHP代码,我正在尝试移植到Python,我不知道如何在没有引用的情况下工作。你知道吗
本质上,它是一个像树一样工作的配置类,每个键可以有一个简单的值,或者它自己的一组键和值。类的一部分要求能够设置树的一个特定部分,而不必为根键发送整个新dict。你知道吗
{ "caching": { "enabled": true }}
例如,上面可以是一个简单的配置。调用下面的代码将由true变为false
Config.set('caching:enabled', false);
为了在PHP中实现这一点,我使用了引用
class Config
{
private static $aValues;
public static function set($key, $value)
{
if(strpos($key, ':')) {
$aKeys = explode(':', $key);
$iCount = count($aKeys);
} else {
$aKeys = array($key);
$iCount = 1
}
$mData = &self::$aValues
for($i = 0; $i < $iCount; ++$i)
{
if(!isset($mData[$aKeys[$i])) {
$mData[$aKeys[$i]] = array();
}
$mData = &$mData[$aKeys[$i]];
if($i == ($iCount - 1)) {
$mData = $value;
}
}
}
}
但是如果我尝试用Python做类似的事情
_dmValues = dict()
def set(key, value):
global _dmValues
if key.find(':'):
aKey = key.split(':')
iCount = len(key)
else:
aKey = (key,)
iCount = 1
mData = _dmValues;
for i in range(0, iCount):
if key[i] not in mData.keys():
mData[key[i]] = dict()
mData = mData[key[i]]
if i == (iCount - 1):
mData = value
它不起作用,mData是正确的值,但是自从我写了它之后,它就不再是一个引用了。你知道吗
我该怎么做呢?这在Python中是可能的,还是我应该从头开始重新编写逻辑,放弃一个完美的端口?你知道吗
您可以按以下方式设置方法:
尽管最好删除全局值并将引用传递给dict作为参数:
我玩得更多,意识到我有解决办法,我只是应用不当。你知道吗
每个字典,即使是另一个字典的键的一部分,也可以通过引用传递。也就是说,如果我更改字典中的一个键,它在父字典中也会更改。不幸的是,我正在更改引用字典的变量,而不是字典本身。你知道吗
这个很好用
相关问题 更多 >
编程相关推荐