python中的可变参数

先看下面两段代码: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

相关文章
相关标签/搜索