首页之约我用 Linux

Python中函数参数传递

2018-08-28  本文已影响17人  liuchungui

前几天写一个方法的时候,内部调用了第三方库的可变参数方法,由于实际的需求,导致参数越写越长,很不方便。这时是不是我们自己也应该写一个可变参数的方法,然后根据需要动态传递参数?

在解决这个问题之前,我们先来了解Python中四种传递参数的形式:

fun1(a, b, c)
fun2(a=1, b=2, c=3)
fun3(*args)
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函数的四种参数传递方式

上一篇 下一篇

猜你喜欢

热点阅读