zoukankan      html  css  js  c++  java
  • 第二十四节 闭包

    '''
    __call__方法:对象后面加括号,触发执行
    
    '''
    
    class Foo():
    
        def __init__(self, k, b):
            self.k = k
            self.b = b
    
        def __call__(self, x):
            print(self.k * x + self.b)
    
    
    ojb = Foo(1, 2)  # 执行__init__
    ojb(3)  # 执行__call__方法
    
    print(50*"@")
    '''
    闭包:函数嵌套,一般两层,内层函数会用到外层函数传递进来的数据,而外层函数会返回内层函数的引用,避免全局变量的使用,又可以根据外层函数的传递进来的数据做到类似对象生成实例的效果
    '''
    
    def text1(k, b):
        m = 100
        def return_y(x):
            nonlocal m  # 修改外部变量的值
            m =200
            print(k * x + b,m)
        return return_y
    
    t1 = text1(1, 1)
    t1(0)
    t1(1)
    t1(2)
    print(50*"@")
    t2 = text1(2, 2)
    t2(0)
    t2(1)
    t2(2)
    
    
    '''
    函数、匿名函数、闭包、对象 当做实参时有什么区别?
    1、匿名函数能够完成基本的简单功能....传递时这个函数的引用 只有功能
    2、普通函数能够完成较为复杂的功能...传递时这个函数的引用 只有功能
    3、闭包能够完成较为复杂的功能...传递是这个闭包中的函数及数据,因此传递时功能+数据
    4、对象能够完成最为复杂的功能...传递是很多数据+很多功能,因此传递是功能+数据
    '''
  • 相关阅读:
    开启Tomcat APR运行模式,优化并发性能
    KVM与XEN虚拟化环境究竟有何不同
    fio测试freenas共享的iscsi磁盘性能
    ubuntu 16.04网速监控脚本
    centos 7网速监控脚本
    ubuntu 16.04 配置远程连接
    iometer测试磁盘IO性能
    pip 使用豆瓣源
    raid write back / write throught
    卡常数技巧
  • 原文地址:https://www.cnblogs.com/kogmaw/p/12602543.html
Copyright © 2011-2022 走看看