Go 和Python中的闭包实现及使用

简介: Go 和Python中的闭包实现及使用

闭包


网上闭包的概念已经很多了, 在这就简单说一下

体现:  在一个函数内部(外函数)返回另外一个函数(内函数)
     内函数使用外函数的局部变量
     外函数的返回值是内函数的引用
     只要闭包还被使用,那么被闭包引用的变量会一直存在


使用场景


比如说 你有一个变量需要放到内存中, 然后只希望那个变量由你想要的方式去改变, 其他人不能去改变的时候就可以用到了


实例


我有一个方法需要判断es有没有这个库, 我想把有的索引库放到内存里, 方便所有人进行判断操作 (这只是一个简单demo, 真正要用的时候 Map 需要用到读写锁, 可以看我另一篇文章 https://blog.csdn.net/ywdhzxf/article/details/93786811)

package main
import "fmt"
// indexCache  index缓存
func indexCache() func(index string) (bool, error) {
  cache := map[string]interface{}{}
  return func(index string) (bool, error) {
    if val, ok := cache[index]; ok {
      fmt.Println(val)
      return true, nil
    } else {
      bol, _ := demo(index)
      if bol {
        cache[index] = 1
        return true, nil
      }
      return false, nil
    }
  }
}
// demo  把这个方法当做查询es是否有这个索引库
func demo(index string) (bool, error) {
  data := map[string]interface{}{
    "aaa": "bbb",
  }
  if _, ok := data[index]; ok {
    return true, nil
  } else {
    return false, nil
  }
}
func main() {
  var isExists = indexCache()
  fmt.Println(isExists("aaa"))
  fmt.Println(isExists("bbb"))
  fmt.Println(isExists("aaa"))
}

返回


true <nil>
false <nil>
1
true <nil>


可以看到临时变量会被保留


Python实现

def indexCache():
    cache = {}
    def isIndex(index):
        if bool(cache.get(index)):
            return 1
        else:
            bol = demo(index)
            if bol:
                cache[index] = 1
                return 1
            else:
                return 0
    return isIndex
def demo(index):
    data = {"aaa": "bbb"}
    if bool(data.get(index)):
        return 1
    else:
        return 0
if __name__ == '__main__':
    isExists = indexCache()
    print(isExists("aaa"))
    print(isExists("bbb"))
    print(isExists("aaa"))


目录
相关文章
|
1月前
|
算法 Go Python
获取指定范围符合正态分布的随机数Go/Python
获取指定范围符合正态分布的随机数Go/Python
28 0
|
3月前
|
存储 运维 安全
go语言中闭包与匿名函数是什么?
本文探讨了Go语言中的匿名函数与闭包。首先介绍了匿名函数的定义与使用方式,包括直接调用、赋值给变量以及作为全局变量的应用。接着深入解析了闭包的概念及其本质,强调闭包能实现状态保持,但也警告其不当使用可能导致复杂的内存管理和运维问题。通过示例展示了如何利用闭包实现累加器功能,并对比了使用结构体字段的方法。最后,通过一个并发场景的示例说明了闭包在Go中处理多协程安全访问共享数据的应用,展示了闭包结合锁机制确保数据一致性的方式。
|
1天前
|
存储 缓存 算法
Python闭包|你应该知道的常见用例(下)
Python闭包|你应该知道的常见用例(下)
10 1
Python闭包|你应该知道的常见用例(下)
|
5天前
|
自然语言处理 小程序 测试技术
Python闭包|你应该知道的常见用例(上)
Python闭包|你应该知道的常见用例(上)
14 3
Python闭包|你应该知道的常见用例(上)
|
4月前
|
监控 测试技术 Python
颠覆传统!Python闭包与装饰器的高级实战技巧,让你的项目效率翻倍
【7月更文挑战第7天】Python的闭包与装饰器是强大的工具。闭包是能记住外部作用域变量的内部函数,常用于动态函数创建和工厂模式。例如,`make_power`返回含外部变量`n`的`power`闭包。装饰器则允许在不修改函数代码的情况下添加新功能,如日志或性能监控。`my_decorator`函数接收一个函数并返回包装后的函数,添加了前后处理逻辑。掌握这两者,可提升编程效率和灵活性。
40 3
|
23天前
|
Go Docker Python
docker的python与go镜像的制作
docker的python与go镜像的制作
26 1
|
1月前
|
算法 安全 Go
RSA加密算法详解与Python和Go实现
RSA加密算法详解与Python和Go实现
79 1
|
26天前
|
Python
深入理解Python中的闭包
深入理解Python中的闭包
16 0
|
1月前
|
算法 安全 Go
Python与Go语言中的哈希算法实现及对比分析
Python与Go语言中的哈希算法实现及对比分析
32 0
|
1月前
|
安全 测试技术 Go
Python 和 Go 实现 AES 加密算法的技术详解
Python 和 Go 实现 AES 加密算法的技术详解
61 0