You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python中get函数后为何需加括号?代码逻辑解析问询

嘿,我来帮你把这段代码拆解得明明白白,一步步搞清楚你的疑问~

先搞懂dispatch_dict函数的整体逻辑

这个函数其实是用字典实现了一个简易的运算分发器,核心就是把不同的运算符字符串,对应到具体的数值计算逻辑上:

  • 它接收三个参数:operator(你要执行的运算类型,比如'sub'代表减法)、xy(要运算的两个数)
  • 函数内部的字典里,键是运算符字符串,值都是lambda匿名函数——这些lambda没有参数,直接返回xy对应的运算结果。比如'add'对应的lambda: x + y,意思就是"调用我,我就返回x加y的结果"
重点解答:为什么get函数后面要加括号?

先回忆下字典的get()方法:dict.get(key, default)的作用是,从字典里取出key对应的值;如果key不存在,就返回default指定的内容。

把这段代码拆成两步看,瞬间就懂了:

  1. 第一步:.get(operator, lambda: None)
    这部分会根据你传入的operator,从字典里拿到对应的lambda函数对象。比如你传'sub',就拿到lambda: x - y;如果传了个字典里没有的运算符(比如'pow'),就拿到默认的lambda: None
  2. 第二步:后面的()
    这是Python里调用函数的语法!因为第一步拿到的是一个函数对象,不是运算结果。只有加上括号,才会执行这个lambda函数,算出最终的数值(比如2-4=-2),或者返回None。

举个实际运行的例子:
当你调用print(dispatch_dict('sub', 2, 4))时:

  • 字典get('sub')取出lambda: 2 - 4这个函数
  • ()执行它,得到结果-2
  • 最后打印出来就是-2

要是没加这个括号,函数返回的就是lambda函数本身,打印出来会是类似<function dispatch_dict.<locals>.<lambda> at 0x10a1b2c3d>这样的函数地址,完全不是你想要的运算结果~

内容的提问来源于stack exchange,提问作者Przemysław Krawczyk

火山引擎 最新活动