Python函数传列表参数用法介绍
本文将从多个方面详细阐述Python中函数传列表参数的使用方法和技巧。
一、传递列表作为参数
1、如果要把一个列表作为参数传递给函数,只需要在函数里定义一个参数,这个参数接收传递过来的列表即可。
def print_list(my_list): for item in my_list: print(item) my_list = [1, 2, 3, 4, 5] print_list(my_list)
2、除了可以传递一维列表,函数还可以传递多维的列表作为参数,因为多维列表的实际上是一个列表的列表。
def print_multi_dim_list(multi_dim_list): for row in multi_dim_list: for item in row: print(item, end=' ') print() multi_dim_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print_multi_dim_list(multi_dim_list)
二、使用*运算符和**运算符传递列表参数
1、使用*运算符传递列表参数可以将一个列表拆包成多个单独的参数,这些参数可以分别传递给函数。
def print_args(arg1, arg2, arg3): print(arg1, arg2, arg3) my_list = [1, 2, 3] print_args(*my_list)
2、使用**运算符传递列表参数可以将一个字典拆包成多个键值对的形式,这些键值对可以分别传递给函数。
def print_kwargs(**kwargs): for key, value in kwargs.items(): print(f'{key}: {value}') my_dict = {'name': 'Tom', 'age': 18} print_kwargs(**my_dict)
三、函数中修改列表参数
1、在函数中修改传递过来的列表——对传递过来的列表进行修改,并不会改变原来的列表,这是因为传递的是一个指向列表的引用,而不是列表本身。
def modify_list(my_list): my_list.append(4) print(my_list) my_list = [1, 2, 3] modify_list(my_list) print(my_list)
2、使用return语句将修改后的列表返回,以便在函数外使用。
def modify_list_and_return(my_list): my_list.append(4) return my_list my_list = [1, 2, 3] new_list = modify_list_and_return(my_list) print(new_list)
四、函数传递一个空列表(或字典)作为默认参数
1、在定义函数时,可以给参数设置默认值为空列表(或字典),这样在函数调用时,可以不传递该参数,从而避免出现参数个数不匹配的问题。
def print_list_default(my_list=[]): for item in my_list: print(item) print_list_default(['apple', 'banana']) print_list_default() print_list_default()
2、注意到当定义一个函数以一个空列表为默认值的时候,多次调用它,会遇到一些错误,原因在于列表在内存中只被创建一次。这个分配的内存空间仍然由所有默认参数使用,因此,在修改列表参数的时候,实际上修改的是同一个对象,而不是重新在内存中创建一个新的对象。为避免这个问题,我们应该像下面代码中写的那样,使用None作为默认值,并在函数内部重新创建一个列表。
def print_list_default_fixed(my_list=None): if my_list is None: my_list = [] for item in my_list: print(item) print_list_default_fixed(['apple', 'banana']) print_list_default_fixed() print_list_default_fixed()
五、函数传递一个常量列表
1、在传递一个常量列表时,我们最好使用元组而不是列表作为参数,这是因为元组是不可变的,一旦定义就不能更改,而列表是可变的,可能会在函数内部被修改,从而引起一些意外的错误。
def print_tuple(my_tuple): for item in my_tuple: print(item) my_tuple = (1, 2, 3) print_tuple(my_tuple)
2、当然,可以在传递一个列表时,在函数内部复制一份,从而保证不会在函数内部被修改,因为复制出来的列表与传递过来的列表是不同的对象。
def modify_copy(my_list): new_list = my_list.copy() new_list.append(4) return new_list my_list = [1, 2, 3] new_list = modify_copy(my_list) print(new_list) print(my_list)
六、小结
本文详细阐述了Python函数传递列表参数的使用方法和技巧。通过了解这些知识,我们可以更加灵活和高效地使用Python编程。