perl和python中的闭包

闭包:

闭包(closure)不是什么复杂得不得了的东西: 它只不过是个"内层"的函数,由一个名字(变量)来指代,


而这个名字(变量)对于"外层"包含它的函数而言,是本地变量。  


perl 中的闭包;

[root@node01 ~]# cat a2.pl
sub generate_greeting {  
    my $greeting = shift;  
    return sub {  
      my $subject=shift;  
      print "$subject is $subject
";
      print "$greeting---- $subject abcdefg
";  
   }  
};


my $a=generate_greeting('aaabbb');
print $a."
";
print &$a('ffff')."
";
[root@node01 ~]# perl a2.pl
CODE(0x17f9160)
$subject is ffff
aaabbb---- ffff abcdefg
1

这是一个闭包(闭包)

  
闭合的另外一个用途就是函数生成器,也就是说,创建和返回全新函数的函数。下面是一个  
用闭合实现的函数生成器的例子



在基于事件的编程里面,这种做法常常叫做回调(callback),比如把一些代码和一次键盘敲击,鼠标单击,窗口弹出联系起来。



python 中的闭包:
# !/usr/bin/env python
# -*- coding: utf-8 -*-
def generate_greeting (prefix):
    def greeting(name):
        print prefix, name
    return greeting
#返回一个全新的函数
a=generate_greeting('aaabbb')
print a
print type(a)

print a('ffff')

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/Django/a25.py
<function greeting at 0x027AFA30>
<type 'function'>
aaabbb ffff
None

原文地址:https://www.cnblogs.com/hzcya1995/p/13349474.html