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

Lambda函数访问外部变量

仇迪
2023-03-14
问题内容

我想使用匿名函数,所以我决定制作一个简单的主要查找器。这里是:

tests = []
end = int(1e2)
i = 3
while i <= end:
    a = map(lambda f:f(i),tests)
    if True not in a:
        tests.append(lambda x:x%i==0)
        print i
    print tests
    print "Test: "+str(i)
    print str(a)
    i+=2

然而,我发现了什么,就是ilambda x:x%i==0每次访问,而我希望它是一个字面上的数字。我怎样才能使其成为lambda x:x%3==0替代?


问题答案:

您可以i在创建lambda时“捕获”

lambda x, i=i: x%i==0

这会将ilambda的上下文设置为等于i创建时的值。您还可以说,lambda x, n=i: x%n==0如果需要的话,它并不能完全捕获,但是可以满足您的需要。

这是一个查找问题,类似于具有定义函数的以下内容:

i = "original"

def print_i1():
    print(i) # prints "changed" when called below

def print_i2(s=i): #default set at function creation, not call
    print(s) # prints "original" when called below


i = "changed"
print_i1()
print_i2()


 类似资料:
  • 问题内容: 我外面有一个数组: 我想让我的函数可以访问其外部的数组,以便可以向其添加值 如何为函数赋予正确的作用域范围? 问题答案: 默认情况下,当您在函数内部时,您无权访问外部变量。 如果您希望函数可以访问外部变量,则必须在函数内部将其声明为: 有关更多信息,请参见 可变作用域 。 但是请注意, 使用全局变量不是一个好习惯 :通过这种方法,您的函数不再是独立的。 一个更好的主意是使您的函数 返回

  • 本文向大家介绍JavaScript闭包函数访问外部变量的方法,包括了JavaScript闭包函数访问外部变量的方法的使用技巧和注意事项,需要的朋友参考一下 闭包是指有权访问另一个函数作用域中的变量的函数,但作用域的配置机制有一个需要注意的地方,即闭包只能取得包含函数中任何变量的最后一个值。 如以下案例: 执行结果: 表面上看,似乎每个函数返回的i值都不相同,比如c_arr[0]的值应该是0,c_a

  • 问题内容: $.getJSON(“http://192.168.1.9:8983/solr/db/select/?wt=json&&start=0&rows=100&q="+query+"&json.wrf=?", function(result){ //$.each(result.response.docs, function(result){ 我得到我必须使ajax调用异步的问题。所以我确实喜

  • 问题内容: 基本上,我使用此方便的函数来处理数据库行(请注意PDO和/或其他内容) 使用此功能,我可以简单地执行以下操作: 假设现在我需要将所有内容串联在一起(这只是一个示例)。 我该怎么办?我当时在想像这样的东西,但是它不是很优雅: 问题答案: 你必须使用如在文档中所述: 闭包也可以从父范围继承变量。任何此类变量必须在函数头中声明。从父作用域继承变量与使用全局变量不同。全局变量存在于全局范围内,

  • 问题内容: 我正在尝试使用laravel进行简单的redis流水线命令,并且有一个问题: 我得到了“未定义变量:a”。我想我在这里错过了一些东西。有人可以帮忙吗? 问题答案: 这样,您就可以使变量在匿名函数的作用域内可见:

  • 问题内容: 我正在尝试使用Firebase设置CollectionView中的单元格数量。我试图创建一个局部变量,并将其设置为与Firebase变量相同的值,但是当我尝试在函数外部使用它时,它将无法正常工作。我也尝试在ViewWillAppear中设置它,但是没有用。 我设置导航栏标题以查看值。当它在闭包中设置时,我得到了正确的值,当我在闭包外部(在firebase函数之后)写了它时,它的值为0。