高级闭包用法

高级闭包用法:

#!/usr/bin/env python
# !-*-coding:utf-8-*-

"""
高级装饰器和闭包实例
"""
import time

def logged(when):
    """
    输出函数的日志信息
    :param when: 选取那种日志格式
    """
    def log(f, *args, **kargs):
        print "asdfads %s" %f
        print """ Called:
        function:%s
        args:
        kargs
        """  % f

    def pre_logged(f):
        def wrapper(*args, **kwargs):
            log(f, *args, **kwargs)
            try:
                return f(*args, **kwargs)
            except Exception, e:
                print e
        return wrapper

    def post_logged(f):
        print f
        def wrapper(*args, **kwargs):
            log(f, *args, **kwargs)
            try:
                now = time.time()
                return f(*args, **kwargs)
            except Exception, e:
                print e
            finally:
                print "time waster: %d" % (time.time()-now)
        return wrapper

    return {"pre": pre_logged,
            "post": post_logged}[when]

@logged("post")
def func(aa):
    print aa

func("打倒日本帝国主义")
时间: 2024-10-06 08:57:12

高级闭包用法的相关文章

JS高级——闭包

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <script type="text/javascrip

TStrings类的一些高级的用法

TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的.常规的用法大家都知道,现在来讨论它的一些高级的用法.先把要讨论的几个属性列出来:1.CommaText2.Delimiter & DelimitedText3.Names & Values & ValueFromIndex 先看第一个:CommaText.怎么用呢?用代码说话:constconstr :String = 'aaa,bbb,ccc,ddd';varstrs :TStrings;i :Integ

MongoDB高级查询用法

译 MongoDB高级查询用法 2018年09月04日 18:52:43 小小小辉happy 阅读数 752更多 分类专栏: 数据库 db的帮助文档 输入:db.help(); db.AddUser(username,password[, readOnly=false])  添加用户 db.auth(usrename,password)     设置数据库连接验证 db.cloneDataBase(fromhost)     从目标服务器克隆一个数据库 db.commandHelp(name)

js的一种闭包用法

经常忘记闭包的具体用法,写个例子给以后参考: 没用闭包: for(var i = 0; i < 100; i++){     setTimeout(function(){         console.log(i)},1000     ) } 结果1s后显示100个100 使用闭包: for(var i = 0; i < 100; i++){ (function(i){ return (function(i){ setTimeout(function(){console.log(i)},10

nmap 高级扫描用法

nmap提供了四项基本功能(主机发现.端口扫描.服务与版本侦测.OS侦测)及丰富的脚本库.Nmap既能应用于简单的网络信息扫描,也能用在高级.复杂.特定的环境中:例如扫描互联网上大量的主机:绕开防火墙/IDS/IPS:扫描Web站点:扫描路由器等等. 简要回顾Nmap简单的扫描方式:全面扫描:nmap-T4 -A targetip 主机发现:nmap-T4 -sn targetip 端口扫描:nmap-T4 targetip 服务扫描:nmap-T4 -sV targetip 操作系统扫描:nm

js闭包用法

闭包 既保证了 内部函数的私有性 又可以向外公开 通过一个已有对象 向它注入属性 1 /** 2 * 闭包 3 * 在函数中定义的函数,在外部使用 4 * 1.在函数内部定义的函数,在外部不能访问 5 */ 6 function a(){ 7 /** 8 * b函数是一个私有函数 9 */ 10 function b(){ 11 alert("aaaa"); 12 } 13 return b; 14 } 15 //var bb = a(); 16 //bb(); 17 (functio

Python高级--闭包与装饰器

前言:在Python中,闭包是一种非常有用的功能!它通常与装饰器一起搭配使用,可以在不改变被装饰函数的功能的基础上,完成更多的功能.如权限认证. 一.如何定义闭包 1.闭包就是两个嵌套的函数,外层函数返回内层函数的引用,而且外层函数必须携带参数!为什么外层函数必须要有参数呢?可以思考一下! 基本格式如下: 1 def outer_fun(func): 2 def inner_fun(): 3 pass 4 return inner_fun 2.与普通函数的区别: 闭包的外层函数的变量可以在内存中

js高级-闭包

function foo(x){ var tmp = 3; return function(y){ //把一个函数作为返回值,定义时候的作用域 console.log(x+y+(++tmp)) //++tmp先自加再参与表达式运算 } } var bar = foo(2) //此时bar指向了匿名函数,匿名函数又指向了 x,tmp两个变量 bar就是一个闭包(匿名函数加x,tmp两个父级变量) bar(10) //16 bar(20) //27 此时函数执行完成后里面的变量没有回收掉 所以tmp

JS高级---闭包小案例

闭包小案例 普通的函数 //普通的函数 function f1() { var num = 10; num++; return num; } console.log(f1()); //11 console.log(f1()); //11 console.log(f1()); //11 函数模式的闭包 //函数模式的闭包 function f2() { var num = 10; return function () { num++; return num; } } var ff = f2();