python中的可变参数

先看下面两段代码:

第一种:

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]

转载于:https://my.oschina.net/u/3636678/blog/2208436

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值