装饰器 *arg **args
2018-07-17 本文已影响0人
心疼你萌萌哒
用 * 收集位置参数
In [91]: def print_args(*args):
...: print('传入的位置参数会包含在一个元组里:',args)
...:
# 情景 1
In [92]: print_args(22,'192.168.1.10','yangge')
传入的位置参数会包含在一个元组里: (22, '192.168.1.10', 'yangge')
# 情景 2
In [93]: li = [22,'192.168.1.10','yangge']
In [94]: print_args(li)
传入的位置参数会包含在一个元组里: ([22, '192.168.1.10', 'yangge'],)
# 上面的这种方式是,每个实参对象作为元组的一个元素
# 玩点儿花活
In [95]: print_args(*li)
传入的位置参数会包含在一个元组里: (22, '192.168.1.10', 'yangge')
In [102]: print_args(*'abc')
传入的位置参数会包含在一个元组里: ('a', 'b', 'c')
# 这也就是传说总元组解包的原理
# 把一个可迭代对象中的每个元素作为元组的每一个元素
用 ** 收集关键字参数
def print_kwargs(**kwargs):
print("接收的关键字参数,会是一个字典:", kwargs)
print_kwargs(name='yangge')
接收的关键字参数,会是一个字典: {'name': 'yangge'}
In [105]: print_kwargs(ip='192.168.1.10', port=22)
接收的关键字参数,会是一个字典: {'ip': '192.168.1.10', 'port': 22}
# 同样可以玩点儿花活
In [106]: dic = {'ip': '192.168.1.10', 'port': 22}
In [107]: print_kwargs(**dic)
接收的关键字参数,会是一个字典: {'ip': '192.168.1.10', 'port': 22}
装饰器
def outer(f):
def inner(*arg):
print("haha")
f()
print(arg)
print("haha")
return inner
@outer
def echo(*arg):
print("gg")
arg=[1,2,3]
echo(*arg)
def outer(f):
def inner(*arg,**args):
print("haha")
f()
print(arg,'and',args)
print("haha")
return inner
@outer
def echo(*arg,**args):
print("gg")
arg="helloworld"
echo(*arg,ip='192.168.1.10', port=22)