【Python】学习笔记十三:函数的参数对应

位置传递

我们在定义函数时候已经对函数进行了参数传递调用,但是那只是粗浅的位置传递

示例

def sum(a,b,c):
    d = a+b+c
    return d
print(sum(1,2,3))

调用函数sum的时候,1,2,3分别传递给a,b,c

关键字传递

关键字传递是根据每个参数的名字传递参数

print(sum(c=3,b=2,a=1))

关键字可以跟位置传递混合使用,但是位置参数要出现在关键字参数之前

print(sum(1,c=3,b=2))

参数默认值

在定义参数时,使用形如a=10的方式,可以给参数赋予默认值(default),如果参数最终没有被传递值,将使用该默认值。

def sum(b,c,a=10):
    d = a+b+c
    return d
print(sum(c=3,b=2))

默认值需要写在最后,否则报错!

image

调用时候没有a的值,则使用了默认值

打印屏幕结果为:

image

包裹传递

在定义函数时候,我们并不知道调用函数的时候需要传递多少个参数。这时候,使用包裹传递会非常有用

下面是包裹位置传递的例子

def func(*num):
    print(type(num))
    print(num)

func(1,2,3)
func(1,2,3,44,56)

两次调用,尽管参数个数不同,但是都是基于函数func定义。在func的参数表中,所有的参数被name收集,根据位置合成了一个元组(tuple),这就是包裹传递

在元组前加*

下面是包裹关键字传递的例子

def func(**dict):
    print(type(dict))
    print(dict)

func(a=1,b=2,c=3)
func(a=1,b=2,c=3,d=44,e=56)

dict是一个字典,收集所有的关键字,传递函数给func。为了提醒Python,参数dict是包裹关键字传递所用的字典,

在dict前加**

解包裹

*与**也可以在调用的时候使用

下面为例子:

def func(a,b,c):
    print(a,b,c)
args = (1,6,3)
func(*args)

所谓的解包裹,就是在传递tuple时,让tuple的每一个元素对应一个位置参数。在调用func时使用*,是为了提醒Python:我想要把args拆成分散的三个元素,分别传递给a,b,c。

相应的,也存在对词典的解包裹,使用相同的func定义,然后:

def func(a,b):
    print(a,b)

dict={'a':1,'b':2}
func(**dict)

注意:请注意定义时和调用时的区分。包裹和解包裹并不是相反操作,是两个相对独立的过程。

posted @ 2017-10-17 17:33  OLIVER_QIN  阅读(387)  评论(0编辑  收藏  举报