关键字参数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010916338/article/details/82803004

一, 使用方法

  • 参数前加**
    关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
  • 调用方式有两种,第一种:
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
  • 第二种调用方式:
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

二, 看到第二种调用方式, 不禁产生疑问, 这不就是直接传入对象吗? 有必要这么麻烦吗?

  • 定义函数,不带有关键字参数
def person(name, age, kw):
	kw['city'] = 'wuhan'   #调用函数时, 对参数对象进行内部修改
    print('name:', name, 'age:', age, 'other:', kw)
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, extra)
name: Jack age: 24 other: {'city': 'wuhan', 'job': 'Engineer'}
>>>print(extra)
{'city': 'wuhan', 'job': 'Engineer'}  #函数内部修改对象后,会对外部对象有影响
  • 定义函数,不带有关键字参数
def person(name, age, **kw):
	kw['city'] = 'wuhan' #调用函数时, 对参数对象进行内部修改
    print('name:', name, 'age:', age, 'other:', kw)
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'wuhan', 'job': 'Engineer'}
>>>print(extra)
{'city': 'Beijing', 'job': 'Engineer'}   #函数内部修改对象后,会对外部对象没有影响

综上:使用关键字参数, 其实是对对象的一个拷贝, 函数内部无论怎么操作都不会对外部函数造成影响!!!

猜你喜欢

转载自blog.csdn.net/u010916338/article/details/82803004