字典中函数的使用原理及调用方式疑问
字典中函数的使用原理及调用方式疑问
嗨,我来给你把这个事儿掰扯明白,核心得先搞懂Python里的函数本身也是一种对象——这是解开你所有疑问的关键!
先来说第一个问题:为什么字典里的函数值不用加括号(),也不用引号?
- 你定义的
add、substract这些函数名,本质上是一个指向函数对象的“变量”,就像你用n1 = 5定义的数值变量一样,只是这个变量存的不是数字,而是一段可以执行的代码块(也就是函数本身)。把它们放进字典,其实是把函数对象的引用存进去,这样后面还能随时拿出来用。 - 如果加了括号
add(),那就是直接调用函数了,这时候Python会立刻执行add函数的代码(没传参数还会报错),字典里存的就变成函数执行后的结果(比如一个数字),而不是函数本身了——那你后面想算别的数的时候,就没法用这个字典值来调用计算了,对吧? - 至于不用引号,是因为
add是变量名(函数名),不是字符串。要是写成"add",字典里存的就是一个普通字符串,字符串可不能像函数那样加括号调用,肯定会报错的。
再来说第二个问题:为什么能用另一个变量调用函数?你写的symbol(2, 3) = operations[+]应该是笔误,正确的写法是symbol = operations["+"],然后再symbol(2, 3)。
- 当你执行
symbol = operations["+"]时,你从字典里取出的是之前存的add函数对象,把它赋值给symbol变量。这时候symbol和add就像是同一个函数的两个“别名”——就像你给你的手机起了“小灵通”和“砖头机”两个外号,喊哪个都能找到它。 - 所以你调用
symbol(2,3),就和直接写add(2,3)完全一样,Python会执行add函数里的代码,把2和3相加后返回结果5。
给你举个完整的小例子,结合你的代码:
def add(n1, n2): return n1 + n2 operations = {"+": add} # 取出函数赋值给symbol symbol = operations["+"] # 调用函数,和add(2,3)效果一样 result = symbol(2, 3) print(result) # 输出5
这样是不是就清晰多啦?其实本质就是把函数当成普通的对象来存储和传递,这也是Python这类动态语言的灵活之处~
备注:内容来源于stack exchange,提问作者Rohan
相关产品推荐
相关产品推荐

