欢迎访问宙启技术站
智能推送

Python函数参数传递方式总结

发布时间:2023-06-19 12:48:27

Python是一种强类型的动态语言,与其它语言相比,具有灵活的语法和高效的编程方式。在Python中,函数参数传递方式有多种,如默认参数、可变参数和关键字参数等。本文将会详细阐述Python函数参数传递方式的各种形式。

1. 默认参数

默认参数是指在函数定义时给参数指定默认值,如果调用函数时不传递该参数,则参数将使用默认值。例如:

def add(x=0, y=0):

    return x + y

print(add()) # 输出0

print(add(2, 3)) # 输出5

注意,当默认参数是可变对象(比如列表或字典)时,需要特别谨慎。例如:

def func(x, l=[]):

    l.append(x)

    return l

print(func(1)) # 输出[1]

print(func(2)) # 输出[1,2]

print(func(3)) # 输出[1,2,3]

这里的l列表是在函数定义中创建的,而不是在调用函数时创建。因此,在多次调用函数时,每次调用都将修改相同的列表。为了解决这个问题,可以在函数定义中使用不可变默认值,例如:

def func(x, l=None):

    if l is None:

        l = []

    l.append(x)

    return l

2. 可变参数

可变参数是指可以接收任意数量参数的函数,包括0个或更多参数。在Python中,可变参数有两种形式:*args和**kwargs。

*args只接收位置参数,它表示将所有参数收集到一个元组中。例如:

def add(*args):

    result = 0

    for arg in args:

        result += arg

    return result

print(add(1, 2, 3)) # 输出6

print(add(1, 2, 3, 4, 5)) # 输出15

**kwargs则可以接收关键字参数,它表示将所有参数收集到一个字典中。例如:

def show_args(**kwargs):

    for key, value in kwargs.items():

        print(key, value)

show_args(name='Tom', age=20) # 输出name Tom,age 20

3. 关键字参数

关键字参数是指绑定到实参的参数名称,即在函数调用时指定参数名称和值。例如:

def show_info(name, age):

    print('Name:', name)

    print('Age:', age)

show_info(name='Tom', age=20)

注意,必须在已经传递了所有非默认参数后才能传递关键字参数,且不能多次传递同一个参数。例如:

def show_info(name, age, sex='male'):

    print('Name:', name)

    print('Age:', age)

    print('Sex:', sex)

show_info(age=20, name='Tom', sex='female') # 输出Name: Tom,Age: 20,Sex: female

4. 参数序列解包

Python中还可以使用*和**来解包元组和字典,然后将解包后的值传递给函数的可变参数和关键字参数。

例如:

def func(x, y, z):

    print('x:', x)

    print('y:', y)

    print('z:', z)

lst = [1, 2, 3]

dic = {'x': 10, 'y': 20, 'z': 30}

func(*lst) # 等价于func(1, 2, 3)

func(**dic) # 等价于func(x=10, y=20, z=30)

总结一下,Python中有多种函数参数传递方式,包括默认参数、可变参数和关键字参数等。在实现函数时,需要灵活运用这些形式,以达到更好的编程效果。