Python的参数

2019-03-04  本文已影响0人  刘圣凯

Python 中,除了正常定义的参数外,Python 还可以使用默认参数,可变参数,关键字参数,使得函数的灵活度非常大。

默认参数

下面的例子中,就是默认参数的运用

def sayHi(name,city='beijing',age=18):
    print('my name is',name,'. I\'m from',city,'. my age',age)
sayHi('Lisa',age=20)

上面的例子中就是一个默认参数的使用,在调用函数是,如果定义了默认参数,没有传递参数的话,那么就会使用默认的参数。有多个默认参数时,调用的时候,既可以按顺序提供默认参数,也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上。

默认参数很有用,但使用不当,也会掉坑里。默认参数有个最大的坑,演示如下:

def add_end(L=[]):
    L.append('END')
    return L
add_end()
add_end()

如果是正常调用,结果似乎是没问题,可如果是多次调用,那么输出就成了下面这样

>>> add_end()
['END']
>>> add_end()
['END', 'END']

为什么会这样呢,Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。

定义默认参数要牢记一点:默认参数必须指向不变对象!

可变参数

Python 中,是可以定义可变参数的,顾名思义就是说可变参数传入的参数个数不定,举一个例子

def add(n):
    ar = 0
    for x in n:
        ar = ar + x
    print(ar)
    return ar

add([1,2,5,7])

如何是可变参数的话,我们只需要

def add(*n):
    ar = 0
    for x in n:
        ar = ar + x
    print(ar)
    return ar

add(1,2,5,7)

定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数:

def add(*n):
    print(type(*n))

add()

这里我们拿到的是一个元组,当你传已给可变参数的时候,Python会自己将收到的参数变成一个元组,那么,如果你想要传一个元组或者数组参数改怎么办呢

nums = [1,2,3,4,5]
add(*nums)

*nums 表示把 nums 这个 list 的所有元素作为可变参数传进去。这种写法相当有用,而且很常见。

关键字参数

上一篇 下一篇

猜你喜欢

热点阅读