最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

理解Python中s可变参数的*args和**kwargs

来源:动视网 责编:小采 时间:2020-11-27 14:27:46
文档

理解Python中s可变参数的*args和**kwargs

理解Python中s可变参数的*args和**kwargs:使用默认参数的可变参数Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如:def test_defargs(one, two = 2): print 'Required argument: ', one print 'Optional argument: ', two t
推荐度:
导读理解Python中s可变参数的*args和**kwargs:使用默认参数的可变参数Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如:def test_defargs(one, two = 2): print 'Required argument: ', one print 'Optional argument: ', two t


使用默认参数的可变参数

Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如:

def test_defargs(one, two = 2):
 print 'Required argument: ', one
 print 'Optional argument: ', two

test_defargs(1)
# result:
# Required argument: 1
# Optional argument: 2

test_defargs(1, 3)
# result:
# Required argument: 1
# Optional argument: 3

在函数定义时使用*args和**kwargs

当然,本文主要讲一种达到可变参数 (Variable Argument) 的方法:使用*args和**kwargs语法。其中,*args是可变的positional arguments列表,**kwargs是可变的keyword arguments列表。并且,*args必须位于**kwargs之前,因为positional arguments必须位于keyword arguments之前。

首先介绍两者的基本用法。

下面一个例子使用*args,同时包含一个必须的参数:

def test_args(first, *args):
 print 'Required argument: ', first
 for v in args:
 print 'Optional argument: ', v

test_args(1, 2, 3, 4)
# result:
# Required argument: 1
# Optional argument: 2
# Optional argument: 3
# Optional argument: 4

下面一个例子使用*kwargs, 同时包含一个必须的参数和*args列表:

def test_kwargs(first, *args, **kwargs):
 print 'Required argument: ', first
 for v in args:
 print 'Optional argument (*args): ', v
 for k, v in kwargs.items():
 print 'Optional argument %s (*kwargs): %s' % (k, v)

test_kwargs(1, 2, 3, 4, k1=5, k2=6)
# results:
# Required argument: 1
# Optional argument (*args): 2
# Optional argument (*args): 3
# Optional argument (*args): 4
# Optional argument k2 (*kwargs): 6
# Optional argument k1 (*kwargs): 5

在函数调用时,使用*args和**kwargs

*args和**kwargs语法不仅可以在函数定义中使用,同样可以在函数调用的时候使用。不同的是,如果说在函数定义的位置使用*args和**kwargs是一个将参数pack的过程,那么在函数调用的时候就是一个将参数unpack的过程了。下面使用一个例子来加深理解:

def test_args(first, second, third, fourth, fifth):
 print 'First argument: ', first
 print 'Second argument: ', second
 print 'Third argument: ', third
 print 'Fourth argument: ', fourth
 print 'Fifth argument: ', fifth

# Use *args
args = [1, 2, 3, 4, 5]
test_args(*args)
# results:
# First argument: 1
# Second argument: 2
# Third argument: 3
# Fourth argument: 4
# Fifth argument: 5

# Use **kwargs
kwargs = {
 'first': 1,
 'second': 2,
 'third': 3,
 'fourth': 4,
 'fifth': 5
}

test_args(**kwargs)
# results:
# First argument: 1
# Second argument: 2
# Third argument: 3
# Fourth argument: 4
# Fifth argument: 5

使用*args和**kwargs可以非常方便的定义函数,同时可以加强扩展性,以便日后的代码维护。

示例

def foo(*args, **kwargs):
 print('args = ', args)
 print('kwargs = ', kwargs)
 print('---------------------------------------')

if __name__ == '__main__':
 foo(1,2,3,4)
 foo(a=1,b=2,c=3)
 foo(1,2,3,4, a=1,b=2,c=3)
 foo('a', 1, None, a=1, b='2', c=3)

注意

注:在定义或调用这种函数时,要遵循以下规则:
可变参数一定在不可变参数之后
*args是可变的positional arguments列表,**kwargs是可变的keyword arguments列表。并且,*args必须位于**kwargs之前,因为positional arguments必须位于keyword arguments之前

文档

理解Python中s可变参数的*args和**kwargs

理解Python中s可变参数的*args和**kwargs:使用默认参数的可变参数Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如:def test_defargs(one, two = 2): print 'Required argument: ', one print 'Optional argument: ', two t
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top