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