如何使用字典语法调用函数?



我希望能够调用这样的东西:

def lookup(key):
if key == 0:
return "Default"
elif key == 1:
return str(key) + " vertex"
elif key <= 99999:
return str(key) + " vertices"
else:
return "Ignore"

使用以下语法:

my_dict[key]

所以从本质上讲,我想使用字典语法,但不是实际查找真正的字典,而是使用条件来确定键查找的结果应该是什么,并从那里返回一个值。my_dict是什么并不重要,只要它可以像字典一样访问即可。

我知道你可以继承标准的Pythondict类,但我无法弄清楚是否/如何使用这种能力来满足上述要求。

使用答案的示例

感谢大家的帮助!以下是我使用此功能的方式:

具有字典语法的自定义函数:

class ComplexSetting:
def __getitem__(self, key):
if 0<=key<=10000:
return "Reserved " + hex(key)
elif 10001 <= key <= 60000:
return str(key*2)
else:
raise KeyError

设置"字典":

setting_1 = {
0: "option_0"
1: "option_1"
2: "option_2"
}
setting_2 = ComplexSetting()

实现泛型设置的类:

class UserInterface:
def __init__(self, setting):
self.setting = setting
self.ask_for_input()
def ask_for_input(self):
value = input("Please select an option.")
# use generic setting dictionary to access result
result = self.setting[value]
# do some function with the result
print(result)

现在,我可以随时随地重用UserInterface类,而不必担心更改self.setting在实现之间的使用方式。我想这个特定的例子是毫无用处的,但对于我的特定用例来说,拥有这种能力是非常有帮助的

你可以像这样创建它:

class my_dict_class:
def __getitem__(self, key):
if key == 0:
return "Default"
elif key == 1:
return str(key) + " vertex"
elif key <= 99999:
return str(key) + " vertices"
else:
return "Ignore"
res = my_dict_class()
print(res[0]) # prints "Default"

在类中创建具有object.__getitem__(self, key)的类将允许您使用该语法:

class my_dict_class:
def __getitem__(self, key):
if key == 0:
return "Default"
elif key == 1:
return str(key) + " vertex"
elif key <= 99999:
return str(key) + " vertices"
else:
return "Ignore"
my_dict = my_dict_class()
print(my_dict[0]) # Default
print(my_dict[1]) # 1 vertex
print(my_dict[55555]) # 55555 vertices
print(my_dict[99999]) # 99999 vertices
print(my_dict[3748293478932]) # Ignore

编辑:太慢:p

完整代码(基于您的代码(:

class myDict(object): # if you want no inheritance at all(from dict).
def __init__(this):
pass;
def __getitem__(this, key):
if(not(isinstance(key, int))):
raise Exception("TYPE KEY ERROR.");
#END;
if(key==0):
return"DEFAULT";
elif(key==1):
return str(key)+" vertex";
elif(key<=99999):
return str(key) + " vertices";
else:
return str.__new__((str), "Ignore");
#endif;
#END;
#END;
my_dict = myDict();
print(my_dict[1]); # e.g.

最新更新