先看下面兩段代碼:python
第一種:sql
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)
第二種:app
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的可變參數方法定義及調用方法:spa
第一種:kwargs調用時參數是字典類型,傳入時依然是字典類型it
第二種:args調用時參數是數量不肯定的普通變量,傳入時轉爲了tuple類型(不管傳入的是什麼類型,都會再加括號(),進一步轉化爲tuple類型),例如(代碼以下),class
dbengine.singleargsql(sql, self.attr)
若是self.attr=(12, 13, 14),此時self.attr已然是tuple類型,而傳入singleargsql函數中後,args不等於(12, 13, 14),而是((12, 13, 14),),這時若是再想取出相應數據,就不是遍歷args了,而是遍歷args[0]email