【Python 课堂】第69课—— 函数的参数传递(3)

    作者:在线学习平台更新于: 2014-10-29 11:40:45

    大神带你学编程,欢迎选课

    今天课课家在线学习平台小编来说说最为灵活的一种参数传递方式:
     
    func(**kargs)
     
    上次说的 func(*args) 方式是把参数作为 tuple 传入函数内部。而 func(**kargs) 则是把参数以键值对字典的形式传入。
     
    示例:
    def printAll(**kargs):
    for k in kargs:
    print k, ':', kargs[k]
     
    printAll(a=1, b=2, c=3)
    printAll(x=4, y=5)
     
    输出:
    a : 1
    c : 3
    b : 2
    y : 5
    x : 4
     
    字典是无序的,所以在输出的时候,并不一定按照提供参数的顺序。同样在调用时,参数的顺序无所谓,只要对应合适的形参名就可以了。于是,采用这种参数传递的方法,可以不受参数数量、位置的限制。
     
    当然,这还不够。Python 的函数调用方式非常灵活技能培训,前面所说的几种参数调用方式,可以混合在一起使用。看下面这个例子:
     
    def func(x, y=5, *a, **b):
    print x, y, a, b
     
    func(1)
    func(1,2)
    func(1,2,3)
    func(1,2,3,4)
    func(x=1)
    func(x=1,y=1)
    func(x=1,y=1,a=1)
    func(x=1,y=1,a=1,b=1)
    func(1,y=1)
    func(1,2,3,4,a=1)
    func(1,2,3,4,k=1,t=2,o=3)
     
    输出:
    1 5 () {}
    1 2 () {}
    1 2 (3,) {}
    1 2 (3, 4) {}
    1 5 () {}
    1 1 () {}
    1 1 () {'a': 1}
    1 1 () {'a': 1, 'b': 1}
    1 1 () {}
    1 2 (3, 4) {'a': 1}
    1 2 (3, 4) {'k': 1, 't': 2, 'o': 3}
     
    在混合使用时,首先要注意函数的写法,必须遵守:
    带有默认值的形参(arg=)须在无默认值的形参(arg)之后;
    元组参数(*args)须在带有默认值的形参(arg=)之后;
    字典参数(**kargs)须在元组参数(*args)之后。
     
    可以省略某种类型的参数,但仍需保证此顺序规则。
     
    调用时也需要遵守:
    指定参数名称的参数要在无指定参数名称的参数之后;
    不可以重复传递,即按顺序提供某参数之后,又指定名称传递。
     
    而在函数被调用时,参数的传递过程为:
    1.按顺序把无指定参数的实参赋值给形参;
    2.把指定参数名称(arg=v)的实参赋值给对应的形参;
    3.将多余的无指定参数的实参打包成一个 tuple 传递给元组参数(*args);
    4.将多余的指定参数名的实参打包成一个 dict 传递给字典参数(**kargs)。
     
    是不是乍一看有点绕?没关系,赶紧打开你的编辑器,自行体会一下不同调用方式的用法视频教程。然后在未来的编程实践中慢慢熟悉吧。

课课家教育

未登录