防止函数调用的Python包装?

问题描述:

我已经写了一堆帮助函数来包装常见的功能,如插入和选择。下面包含的只是其中的一个包装......我似乎无法弄清楚它为什么不起作用。防止函数调用的Python包装?

我怀疑这是值得做的包装:

from collections import Mapping 
import sqlite3 

def counter(func): 
    def wrapper(*args, **kwargs): 
     wrapper.count = wrapper.count + 1 
    wrapper.count = 0 
    return wrapper 

@counter 
def insert(val, cursor, table="reuters_word_list", logfile="queries.log"): 
    if val: 
     if isinstance(val, (basestring, Mapping)): 
      val='\"'+val+'\"' 
     query = ("insert into %s values (?);" % 'tablename', val) 
     if logfile: 
      to_logfile(query + '\n', logfile) 
     cursor.execute(query) 

if __name__ == '__main__': 
    connection = sqlite3.connect('andthensome.db') 
    cursor = connection.cursor() 
    cursor.execute("create table wordlist (word text);") 
    insert("foo", cursor) 
    connection.commit() 
    cursor.execute("select * from wordlist;") 
    print cursor.fetchall() 
    cursor.close() 

你的柜台装饰从未真正电话 FUNC。

尝试

def counter(func): 
    def wrapper(*args, **kwargs): 
     wrapper.count += 1 
     return func(*args, **kwargs)  # <- this line is important!! 
    wrapper.count = 0 
    return wrapper 
+0

谢谢,我想正是:)。将在10分钟内接受[何时允许我!] – user1438003