当前位置: 首页 > 面试题库 >

嵌套函数如何在Python中工作?

荆梓
2023-03-14
问题内容
def maker(n):
    def action(x):
        return x ** n
    return action

f = maker(2)
print(f)
print(f(3))
print(f(4))

g = maker(3)
print(g(3))

print(f(3)) # still remembers 2

为什么2即使调用maker()时返回并退出,嵌套函数仍会记住第一个值action()


问题答案:

您可以看到它,因为所有源自父函数的变量都被子函数内的实际值替换。这样,无需跟踪父函数的范围即可使子函数正确运行。

将其视为“动态创建函数”。

def maker(n):
  def action(x):
    return x ** n
  return action

f = maker(2)
--> def action(x):
-->   return x ** 2

这是python中的基本行为,对多个分配也是如此。

a = 1
b = 2
a, b = b, a

Python将其读取为

a, b = 2, 1

基本上,在对它们执行任何操作之前会先插入值。



 类似资料:
  • 问题内容: 我有一个方法,我已经分解成一些较小的嵌套函数来分解代码库: 有没有一种方法可以单独运行其中一个嵌套函数。例如: 编辑: 我正在尝试在使用pyramid_breaker构建的Web服务器上设置缓存 这是我的理解可能不准确: 现在我有这个原因是因为装饰器用来创建缓存键的名称空间是从函数和争论中产生的。因此,您不能仅将装饰器放在getThis上,因为请求变量是唯一的,并且缓存是无用的。所以我

  • 很抱歉,如果这是一个简单的问题,我对Node和Sinon相对较新。我正在努力弄清楚如何断言在Nodejs中调用了嵌套异步函数。 我用的是摩卡、柴、西农和请求(https://github.com/request/request)但我想我缺少了一些关于存根部分的基本信息。 my_app.js内的例子- 测试内部。我试图取消对请求的调用,并提供一些虚拟数据以返回。但我在创建存根的行中不断收到一个错误“

  • 问题内容: 在Python中,如果我在父函数中有一个子函数,那么每次调用父函数时,子函数是否“初始化”(创建)?将函数嵌套在另一个函数中是否有任何开销? 问题答案: 是的,每次都会创建一个新对象。除非您处于紧密的循环中,否则这可能不是问题。分析将告诉您是否有问题。

  • 问题内容: 我知道它看起来会令人费解,但是请帮助我了解发生了什么。 给出: 所以基本上,为什么我没有得到三种不同的动物?是不是“打包”到嵌套函数的局部作用域中?如果不是,对嵌套函数的调用如何查找局部变量? 我知道遇到这类问题通常意味着一个人“做错了”,但是我想了解会发生什么。 问题答案: 嵌套函数在执行时(而不是在定义时)从父范围中查找变量。 编译函数主体,然后验证“自由”变量(未在函数本身中通过

  • 问题内容: 假设我有以下python代码: 我想调用external()返回“字符串已被嵌套函数更改!”,但我得到了“”。我得出结论,Python认为该行是对inner()局部的新变量的声明。我的问题是:如何告诉Python应该使用external()字符串?我不能使用关键字,因为字符串不是全局的,它只存在于外部作用域中。有想法吗? 问题答案: 在Python 3.x中,可以使用关键字: 在Pyt

  • 问题内容: 可以说有一个嵌套列表,例如: 在此函数上调用时: 收到的输出是 为什么以及如何运作?它有哪些用例? 问题答案: 如何在Python中比较列表和其他序列? 从字典上比较Python中的列表(和其他序列),而不是基于任何其他参数。 可以将序列对象与具有相同序列类型的其他对象进行比较。比较使用 字典 顺序:首先比较前两个项目,如果它们不同,则确定比较的结果;如果它们相等,则比较下两个项目,依