Python 从字符串调用函数(键[:-1]())
基本上,我有一个键列表:字典中的项,我使用一个循环来查找与我得到的项匹配的键,每个键都有函数。钥匙已经编号了,所以我需要取下最后一个号码 这使得我需要从类似主题中的字符串调用函数:Python 从字符串调用函数(键[:-1]()),python,Python,基本上,我有一个键列表:字典中的项,我使用一个循环来查找与我得到的项匹配的键,每个键都有函数。钥匙已经编号了,所以我需要取下最后一个号码 这使得我需要从类似主题中的字符串调用函数: key[-1]() 键[-1]实际上是一个字符串,返回类似于scalcs的内容,这是我需要调用的函数的名称 我到处找了找,看到了一些关于课程的东西。我是新来的,老实说,我从来没有使用过类,有很多代码和函数。如果可能的话,我宁愿不采用那种方法 d = {key1: item1, key2: item2, akey1:
key[-1]()
键[-1]实际上是一个字符串,返回类似于scalcs的内容,这是我需要调用的函数的名称
我到处找了找,看到了一些关于课程的东西。我是新来的,老实说,我从来没有使用过类,有很多代码和函数。如果可能的话,我宁愿不采用那种方法
d = {key1: item1, key2: item2, akey1: item3, akey2: item4, dkey1: item1, dkey2: item2}
当我的值与字典中附加到键的值匹配时,我想调用key、akey或dkey
因此,我将循环遍历d,如下所示:
for key, value in d.items():
if id == value:
print key[:-1]
现在我只需要调用该键[:-1]而不是将函数名存储为字典的键,您可以尝试存储函数本身:
def hello_world():
print "hello world"
d = {'hello':hello_world}
d['hello']()
locals()['hello_world']()
>>> f = lambda x:x+1
>>> g = lambda x:x-1
>>> D = {f:'0', g:'1'}
>>> (F,) = [k for k,v in D.items() if v=="0"]
>>> F(3)
4
如果需要将键保留为字符串,则创建第二个字典(key\u as\u string,对应的\u函数)
,其中包含所有对应项,只需检索与上一步获得的键对应的函数即可
请注意,您需要非常小心,不要让多个键具有相同的值,否则,无法确定您将获得唯一的函数。最安全的方法是为你拥有的东西建立一个反向字典:
(一些字符串索引,一个函数)
还要注意,函数只是一个对象:在上面的示例中,我使用了一些非常简单的东西,比如lambda
,但您可以使用更复杂的东西:
def a_function(...):
...
your_dictionary = {a_function: your_index}
safer_dictionary = {your_index: a_function}
我不能完全肯定我是否理解你的问题。以下是正确的吗 你有字典吗
d1 = {key1: item1, key2: item2, ...}
及
d2 = {key1: function1, key2: function2, ...}
给定一个项目item2
,您希望找到function2
如果是这样的话,那么您应该以不同的形式存储您拥有的信息
d = {item1: function1, item2: function2, ...}
然后,您需要的函数是d[item2]
要从
d1
和d2
生成d
,可以执行以下操作
d = {item: d2[key] for key, item in d1.items()}
对于键,snamedict.items()中的值:如果id==value:globals()[key[:-1]]()返回:TypeError:“int”对象不可调用,请尝试打印
globals()[key:-1]
而不是调用它来查看其中的内容…Dur,这是一个已经解决的问题,但是现在我得到了正确的函数名,但是我得到了一个错误:KeyError:'otof'Perfect!所以我有几个问题。最初是因为我得到了错误的值,然后是因为我在声明函数之前调用了它们(我想),最后是因为我使用的是全局还是局部。这就解决了!谢谢一般来说,像这样使用locals()
不是一个好主意,因为很明显,它包含所有的局部变量,而不仅仅是重要的变量。这将导致奇怪和奇妙的错误。相反,制作一个只包含你想要的东西的字典,并使用它。嘿,这个函数是一个多行函数,有一堆不同的if语句以及声明的变量等等,这样做是不对的?如果我们有两个带“0”的值呢??它将如何存储在(F,)??@user1610719。。这只是一个lambda
函数。。您可以使用任何其他普通的多行函数。。会的workk@PierreGM.. 我想,我没有正确理解OP的问题。。我需要再看一看...“虽然键是有编号的,所以我需要去掉最后一个数字.-你这句话是什么意思?嘿,我有d={key1:item1,key2:item2,akey1:item3,akey2:item4,dkey1:item1,dkey2:item2}当我的值与字典中键的值匹配时,我想调用key,akey,或dkey,当您有item1
时,您应该调用什么<代码>键1dkey1
?item1将调用key(),item2也将调用key()。多亏了乔兰和其他人的帮助,我把它修好了