我有一个dict,存储两个这样的函数:
def quick():
print("dex is 1")
def strong():
print("str is 1")
def start():
suffix = {"quick" : quick(), "strong" : strong()}
suffix.get("quick")
start()
然后我执行此代码,输出为:
dex is 1
str is 1
似乎我的dict.get()
在这里效果不佳。为什么两个函数都执行了,而不仅仅是quick
函数?
答案 0 :(得分:2)
您必须在dict中使用函数作为变量,并仅在需要时拨打电话:
def quick():
print("dex is 1")
def strong():
print("str is 1")
def start():
# without a `()` after a function's name, the function is just a variable,
# waiting for a call
suffix = {"quick" : quick, "strong" : strong}
suffix.get("quick")() # and here is the actual call to the function
start()
答案 1 :(得分:2)
因为函数名后面有()
。函数调用的返回值用于字典值而不是函数。
def start():
suffix = {"quick" : quick(), "strong" : strong()}
# ^^ ^^
修正:
def start():
suffix = {"quick" : quick, "strong" : strong} # Use function itself.
func = suffix.get("quick") # Get function object.
func() # Call it.
答案 2 :(得分:2)
当你写作时
suffix = {"quick" : quick(), "strong" : strong()}
函数quick()
和strong()
正在执行。您需要将其更改为
suffix = {"quick" : quick, "strong" : strong}
并将其称为:
suffix["quick"]()
这是python中的一个很酷的功能。如果您想将争论传递给函数quick()
,可以将它们作为
suffix["quick"](<arguments>)
答案 3 :(得分:2)
问题是你没有在dict中存储函数,而是存储这些函数的返回值:当你写quick()
时,你调用函数。你的dict最终看起来像这样:
suffix = {"quick": None, "strong": None}
你想要做的是将函数本身存储在dict中,如下所示:
suffix = {"quick": quick, "strong": strong} # no parentheses!
这会给你一个内部有两个函数对象的字典。您现在可以从dict中取出其中一个函数并调用它:
func = suffix.get("quick")
func()
就这样,您的代码将正常运行。
def start():
suffix = {"quick": quick, "strong": strong} # no parentheses!
func = suffix.get("quick")
func()
start() # output: dex is 1
如果您需要将某些参数与dict中的函数相关联,请查看this question。