微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在嵌套函数中为以后捕获值?

如何解决如何在嵌套函数中为以后捕获值?

def make_functions():
    flist = []

    for i in [1,2,3]:
        def print_i():
            print(i)
        flist.append(print_i)

    return flist

functions = make_functions()
for f in functions:
    f()

代码输出是:

3
3
3

问题:

  1. 为什么print_i只捕获i的最终值?
  2. 我们如何修改代码以使其显示1,3

回答问题2的一种方法如下,但我想知道是否还有一种更优雅的方法来捕获i的值。

def make_functions():
    flist = []

    for i in [1,3]:
        def print_i(j):
            print(j)
        flist.append((print_i,i))

    return flist

functions = make_functions()
for f,i in functions:
    f(i)

解决方法

由于您的情况下[102,103,104,105] 的范围是i,因此您应该为它创建一个单独的范围,这里将其包装为一个函数

make_functions
,
  1. 就像上述用户一样, updatePost(id: string,title: string,content: string,image: File | string) { let postData: Post | FormData; console.log(id); if(typeof(image) === 'object'){ console.log("Image is object"); const postData = new FormData; postData.append('id',id); postData.append('title',title); postData.append('content',content); postData.append('image',image,title); console.log(postData) } else { console.log("In else!") postData = { id: id,title: title,content: content,imagePath: image }; } 的范围是i。因此,当函数执行时,它们将在该范围3中打印make_function的值。这是因为该函数与主体i保存在一起,而对print(i)的含义没有任何概念。那一刻。在i已经为3的情况下,稍后调用该函数之前,不会评估i

  2. 要回答问题2,我们需要在i函数范围内获得i。我们可以使用包装函数来实现此目的,就像上面的用户一样,将print_i作为参数,或更简单些,我们可以将i的值作为默认值传递。现在,我们将追加3个不同的i函数,每个函数都有其自己的默认值,该默认值是for循环中此时的print(i)的值。

i

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。