Python中函数参数传递
前几天写一个方法的时候,内部调用了第三方库的可变参数方法,由于实际的需求,导致参数越写越长,很不方便。这时是不是我们自己也应该写一个可变参数的方法,然后根据需要动态传递参数?
在解决这个问题之前,我们先来了解Python中四种传递参数的形式:
fun1(a, b, c)
fun2(a=1, b=2, c=3)
fun3(*args)
fun4(**kargs)
我们分别简单介绍一下这四种基本的使用方式。
- 第一种:fun1(a, b, c)它是直接将实参赋予形参,根据位置做匹配,严格要求实参的数量与形参的数量位置相等。
- 第二种:fun2(a=1, b=2, c=3)根据键值对的形式实现参数的匹配,可以忽略参数的位置关系,直接根据关键字来进行赋值。同时,它可以使用默认参数,例如fun2(a=10), 那么b=2和c=3就是默认参数。
- 第三种:fun3(*args),这种方式可以传递任意个参数,这些参数都会放到一个tuple元组中赋值给args。我们在函数内直接操作tuple元组就可以取出参数,这样的好处是参数不受到限制,但本身还是有次序的。
- 第四种:fun4(**kargs),它是以键值对字典的形式传递参数,它的参数数量和位置都不受限制。
其中,第一种和第二种调用方式,我很熟悉。而第三种和第四种,还没怎么用过,下面简单示范下:
def print1(*args):
print('print1: 姓名: {}, 地址: {}'.format(args[0], args[1]))
def print2(**kwargs):
print('print2: 姓名: {}, 地址: {}'.format(kwargs['name'], kwargs['address']))
print1('jack', '中关村')
print2(name='jack', address='中关村')
输出:
print1: 姓名: jack, 地址: 中关村
print2: 姓名: jack, 地址: 中关村
为了方便,我们还可以将这几种方式混用。例如,下面的show_info(),我们必传参数是name,city是默认参数,而其他一些参数,我们可以使用**kwargs可变参数的形式传递进去。示例如下:
def show_info(name, city='北京', **kwargs):
print(name, city, kwargs)
show_info('Jack', city='上海', height='1.8')
好了,现在我们回到前面提出的问题,我们如何写一个内部调用可变参数方法的函数,动态的将参数传递给内部方法?
其实,念起来绕口,实现起来很简单,看下面示例:
def print1(*args):
print('print1: 姓名: {}, 地址: {}'.format(args[0], args[1]))
def print2(**kwargs):
print('print2: 姓名: {}, 地址: {}'.format(kwargs['name'], kwargs['address']))
def print3(*args):
print1(*args)
def print4(**kwargs):
print2(**kwargs)
print3('jack', '中关村')
print4(name='jack', address='中关村')
这样,上面print3()
调用了print1()
,print4()
调用了print2()
,成功的将可变参数从外部传递进去。
总结
主要记录了下函数传递的四种方式,以及如何使用可变参数。虽然是小的知识点,但可以让代码实现起来更优雅。
更多Python视频、源码、资料加群683380553免费获取
本文来自博客园,作者:I'm_江河湖海,转载请注明原文链接:https://www.cnblogs.com/jhhh/p/16766892.html