【Python进阶】*args,**kwargs和修饰器和zip的用法

*args和**kwargs:

二者都用于定义函数参数,当不确定参数数量时吸收多余参数时使用,并且在顺序上*args必须排在**kawrgs前面。

*args:代表任意多个无名参数,返回元组。

**kwargs:代表任意多个无名关键字参数,返回字典。

#例
def test(someone,*args,**kwargs) :
    print(someone,args,kwargs)

test(1,2,3,4,5,a='6',b='7')
#输出
#   1 (2,3,4,5) {'a'='6','b'='7'}

def test(someone,*args,**kwargs) :
    print(someone,*args,kwargs)
test(1,2,3,4,5,a='6',b='7')
#输出
#    1 2 3 4 5 {'a'='6','b'='7'}

def test(someone,*args,**kwargs) :
    print(someone,*args,*kwargs)
test(1,2,3,4,5,a='6',b='7')
#输出
#    1 2 3 4 5 a b

在函数中args和*args会有不同效果,args会以元组形式展示参数,而*args则以元组内的元素形式展示。kwargs和*kwargs也不同,**kwargs则报错。kwargs以字典形式展示参数,而*kwargs则展示字典的键名。具体看以上示例。

另外,传入的字典键名不能与函数定义的参数名相同(起名字过于随便,一开始随手写的例子里第一个参数一开始叫a,结果和传进去的字典键名一样导致报错,血的教训)。

修饰器:

@:修饰器(语法糖),在函数2定义前加上‘@函数1’,则执行函数2之前先执行函数1。即在不改变原函数的前提下,为原函数增加新功能。

@函数1

def 函数2():

        ……

#以上等同于

函数2=函数1(函数2)

#例:
def old(object):
    def inner():
        print('hello')
        object()
    return inner
    pass

@old
def new():
    print('world')

new()

#输出
hello
world

 若是把老函数中内部定义的函数部分去掉,一样能输出‘hello’‘world’但是会报错。

def old_1(object):
    print('hello')
    object()

@old_1
def new_1():
    print('world')

new_1()

 zip:

接收可迭代对象,将其中的元素打包成元组,再返回以元组为元素的列表。

#例:
a = [1,2,3]
b = [4,5,6]
ab = zip(a,b)
print (ab)
print (list (ab) )

若是直接输出ab,则返回该数据所在的内存地址。

强制转换成列表类型(list(ab))才输出内容。

若要还原数据,则将zip和*一起使用。

#例:
a = [1,2,3]
b = [4,5,6]
ab = zip(a,b)
c,d = zip(*ab)
print(c)
print(d)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值