Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从字符串调用函数(键[:-1]())_Python - Fatal编程技术网

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
时,您应该调用什么<代码>键1
dkey1
?item1将调用key(),item2也将调用key()。多亏了乔兰和其他人的帮助,我把它修好了