如何通过字典键值调用函数?我的代码执行不符合预期
问题出在函数的「立即执行」和「函数对象」的区别上!
你现在遇到的问题很典型——你把函数调用(带括号的hello())存进了字典,而不是函数本身(不带括号的hello)。咱们一步步拆解:
1. 你的代码为什么会直接输出hello?
当你写a = {'+': hello()}时,Python会先执行右边的hello(),也就是立刻调用这个函数,所以程序直接打印了hello。而函数hello()没有写return语句,默认返回None,所以你的字典a实际上是{'+' : None}。
这就解释了为什么之后调用a['+']时没有任何结果——你其实是在调用None,当然不会有输出。
2. 正确的写法应该是怎样的?
要把函数对象(而不是函数执行后的结果)存进字典,只需要去掉括号,直接写函数名:
def hello(): print('hello') a = {'+': hello} # 这里存的是函数本身,不是执行结果
这时候字典a的'+'键对应的值是hello这个函数对象,当你想要执行它的时候,再加上括号调用:
a['+']() # 这时候才会执行函数,输出hello
简单总结:
hello:代表函数本身,是一个可调用的对象hello():代表立刻执行这个函数,得到的是函数的返回值
内容的提问来源于stack exchange,提问作者rajini raja
相关产品推荐
相关产品推荐

