Python中调用无参write函数得到的who为何可以传入参数
问题解答
你看到的现象本质是函数返回值为另一个函数的典型用法,和write本身有没有入参没有关系,具体逻辑拆解如下:
你给出的示例代码:
title = 'Thank' def write(): a = lambda x: title + ' ' + x return a who = write() print(who('you'))
核心逻辑
write函数的作用不是直接返回字符串,而是创建并返回一个接收1个入参的匿名函数(也就是你代码里的lambda x: title + ' ' + x)- 你执行
who = write()时,who已经被赋值为write返回的这个匿名函数,和write本身已经没有直接关联了 - 匿名函数定义时要求传入1个参数
x,所以你调用who('you')时,'you'是传给这个匿名函数的入参x,不是传给write的,自然可以正常传参运行
运行步骤拆解
- 执行
write():内部完成匿名函数的定义,将这个匿名函数作为返回值返回 - 赋值给
who:此时who等价于这个匿名函数,功能就是接收1个字符串参数,和全局变量title拼接后返回 - 执行
who('you'):将'you'传给匿名函数的x参数,拼接得到'Thank you'输出
额外补充:这里匿名函数可以访问外部的title变量,是Python闭包的特性,外部变量会被返回的函数持续持有,就算外层的作用域已经执行完毕也可以正常访问。
内容的提问来源于stack exchange,提问作者DevGold
相关产品推荐
相关产品推荐

