2012-11-29 30 views
-1

将PHP-GTK应用程序转换为Python,我需要一个与PHP数组尽可能接近的字典。搜索和尝试后,我在一个myDict()类的子类字典,并实现了第一个重要的功能,就是有这个工作的能力:模拟Python数组中的PHP数组

dict1 = myDict() 
dict1[foo1][foo2][foo3] = 1 

这在myDict()类来实现。

class myDict(dict) : 

    def __missing__(self, arg) : 

     self.__setitem__(arg, myDict()) 
     return self.__getitem__(arg) 

现在出现了问题。 在PHP中,如果我尝试获取未定义的键,它将返回Null(在Python中相当于None)。 在标准的Python字典中,它会返回一个错误。 在我myDict字典,遗憾的是它返回一个空myDict

toto2 = myDict() 
x = toto2["a"]["b"] 
print x 

打印显示:{} 的PHP相当于该代码将返回null,我需要上面返回无x的值的Python代码。

我还没有找到想法让它返回无。因为如果__missing__返回None,那么第二行将会产生一个错误:NoneType是不可取代的。

如果任何人有一个想法来解决这个问题,我将不胜感激,有我在寻找一个解决方案来模拟这种“神奇”的PHP月

+3

只是改变你的代码不依赖于这些功能? – delnan

+4

*“在PHP中,如果我尝试获取未定义的键,它将返回Null”* ...并且它还会引发通知。你不会,永远只会访问一个未定义的索引,并依赖它“返回null”。糟糕的程序员。坏。我认为你应该习惯于这些东西是如何在Python中完成的,而不是将不良的PHP习惯结束。毕竟,人们在没有这个功能的情况下用Python进行编程,他们明显地完成了任务。 – deceze

+1

请,请不要尝试这个,入站谷歌。前面有龙。 – DeaconDesperado

回答

1

想我们可以做myDict回报None当钥匙不在 myDict。然后考虑toto2["a"]["b"]

Python首先评估toto2["a"]。如果"a"不在toto2那么toto2["a"]返回无。接下来,Python会评估None["b"]并提出TypeError

所以你想要的行为在Python中是不可能的。