先看下面两段代码:
第一种:
class users(object): # 初始化 def __init__(self, **kwargs): if isinstance(kwargs, dict): #验证传入的kwargs参数的类型是否为dict print 'users', True #输出True userargs = [] # print "lenofkwargs", len(kwargs) if len(kwargs) >= 0: for attr, value in kwargs.iteritems(): setattr(self, attr, value) userargs.append(value)
第二种:
def singleargsql(self, sql, *args): if isinstance(args, tuple):#验证传入的args参数类型是否为tuple self.cursor.execute(sql, args) #执行这里 self.conn.commit() else: print "nonetuple" self.cursor.execute(sql % args) self.conn.commit()
再看如何调用他们:
user = users(id='00014', email='小14', password='小小', admin=2, name='小小', image='小小', created_at=22)
dbengine.singleargsql(sql, self.id, self.email, self.password, self.admin, self.name, self.image, self.created_at)
这两种都是python的可变参数方法定义及调用方法:
第一种:kwargs调用时参数是字典类型,传入时依然是字典类型
第二种:args调用时参数是数量不确定的普通变量,传入时转为了tuple类型(无论传入的是什么类型,都会再加括号(),进一步转化为tuple类型),例如(代码如下),
dbengine.singleargsql(sql, self.attr)
如果self.attr=(12, 13, 14),此时self.attr已然是tuple类型,而传入singleargsql函数中后,args不等于(12, 13, 14),而是((12, 13, 14),),这时如果再想取出相应数据,就不是遍历args了,而是遍历args[0]