我正在尝试制作一个包含函数作为值的字典。这个想法是,难度变量将在整个程序中改变,这将影响我们从词典中调用哪个函数。 为此,我将不演示该程序,我做了一个简单的模型来演示我遇到的问题。
每当我运行代码时,甚至不输入键,它就会运行功能。为什么会这样?
def printhello():
print("hello")
def printgoaway():
print("go away")
x={1:printhello(),2:printgoaway()}
在这一点上,我没想到会发生任何事情,因为我还没有调用任何键。无论如何,它将运行函数并打印值。
如果我随后通过进行x[1]
或x[2]
对其进行呼叫,则不会发生任何事情。
有人可以告诉我如何在字典中使用函数,并阻止他们在创建字典时自动调用它们
答案 0 :(得分:1)
在函数名称后面加上()
时,将告诉Python立即调用该函数。
您应该更改代码以执行此操作:
x={1:printhello,2:printgoaway}
以便您的词典包含对这些函数的引用,而不是预先调用它们的结果。
那么您以后可以像这样称呼他们
x[0]()
请注意此处的括号,而上一行缺少括号。
答案 1 :(得分:0)
问题是您在括号中的函数名称后放置了括号:
x={1:printhello(),2:printgoaway()}
这将执行功能并将返回的值放入字典中。尝试删除括号:
x={1:printhello ,2:printgoaway}
这会将函数本身放在字典中。
作为示例,这是我的一个程序的一部分:
OPERATIONS = {'+': sum, '*': rdmath.prod}
def evaluate_subtree(node_list, ndx: int) -> int:
"""Evaluate the subtree inside node_list with the root at ndx.
Use recursion and postorder in depth first search."""
this_payload, these_children = node_list[ndx]
if not these_children: # if a leaf node
return int(this_payload)
return OPERATIONS[this_payload](evaluate_subtree(node_list, child)
for child in these_children)
请注意,我将sum
函数和rdmath.prod
(用于计算迭代对象的乘积)放入字典OPERATIONS
中。我的代码片段的最后一行使用字典选择两个函数之一,然后在生成器理解中执行该函数,并返回结果值。 (因此,生成器理解中的值可以相加或相乘。)
尝试类似的方法,看看它是否对您有用。
答案 2 :(得分:0)
printhello()运行printhello
使用x={1:printhello, 2:printgoaway}
存储函数并使用x[1]()
调用
答案 3 :(得分:0)
您需要将函数放入字典中,然后调用该函数。
def printhello():
print("hello")
def printgoaway():
print("go away")
# store functions in dictionary
x={1:printhello,2:printgoaway}
# call object in dictionary as a function
x[1]()