广州番禺Python, Java小班周末班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6
14.3.1 理解可变参数
函数的可变参数,可以从其字面意思来进行理解。“可变”是指参数的数目是变化的,不确定的。在Python中定义函数时,给形参加上一个"*"或"**"的修饰符,那么该形参就是一个可变形参。
14.3.2 操作符*与**
(1) 使用*将实参收集为元组
在Python中定义函数时,在形参前面加一个"*"操作符,那么在执行函数调用时,Python解释器会将该参数位置处开始的实参全部收集到一个元组当中。
代码实例:
# __desc__ = 使用*操作符来定义一个可变形参 # 定义accumulate函数来实现累加 def accumulate(number, *numbers): """形参numbers是一个可变形参""" sum_of_numbers = number """ (1) 使用*来修饰形参以后,Python会将该参数位置处开始的参数全部收集到 一个元组当中 (2) 元组就是使用*修饰的这个numbers形参 """ # 在循环中遍历元组中的元素,并进行累加 for number in numbers: sum_of_numbers += number return sum_of_numbers # 调用函数时,Python会将可变形参位置处开始的参数全部收集到一个元组中 sum_of_numbers = accumulate(1,2,3,4,5) # Python会将实参2,3,4,5全部收集到元组numbers中 # sum_of_numbers的输出为15
可变形参的收集顺序为,从可变形参的位置处开始,从左往右进行收集
由于可变形参是从左到右进行参数的收集,所以我们在定义函数时,通常是将可变形参置于普通形参的右边。如果将可变形参置于普通形参的左边,那么,为了让普通形参产生作用,必须使用关键字参数的方式来进行函数调用。
代码实例:
# __desc__ = 使用*操作符来定义一个可变形参 # 定义accumulate函数来实现累加,将可变形参置于普通形参的左边 def accumulate(*numbers,number): """形参numbers是一个可变形参""" sum_of_numbers = number """ (1) Python将形参numbers位置处开始的参数全部收集到 元组当中 (2)元组就是使用*修饰的这个numbers形参 """ # 在循环中遍历元组中的元素,并进行累加 for number in numbers: sum_of_numbers += number return sum_of_numbers # 在调用函数时,必须通过关键字参数的方式来调用accumulate函数 sum_of_numbers = accumulate(1,2,3,4,number = 5) # 如果不通过关键字参数来调用,那么在执行时会抛出类型错误的异常
(2) 使用**将实参收集为字典
定义函数时,使用**操作符对形参进行修饰,在调用函数时以关键字参数的方式来传递参数,则Python会将该参数位置处开始的实参收集为字典类型。
代码实例:
# __desc__ = 使用**操作符来定义一个可变形参 # 定义accumulate函数来实现累加,将可变形参置于普通形参的左边 def accumulate(**numbers): """形参numbers是一个可变形参""" sum_of_numbers = 0 """ (1)Python将形参numbers位置处开始的参数全部收集到字典当中 (2)字典就是使用**修饰的这个numbers形参 """ # 在循环中遍历字典中的键名,并将键值进行累加 for _ in numbers: sum_of_numbers += numbers[_] return sum_of_numbers # 在调用函数时,必须通过关键字参数的方式来调用accumulate函数 sum_of_numbers = accumulate(number1 = 5, number2=3) # sum_of_numbers的输出为8(3) 混合使用"*"与"**"
混合使用*与**操作符来对形参进行修饰。
代码实例:
# __desc__ = 混合使用*与**操作符来对形参进行修饰 # 定义accumulate函数来实现累加 def accumulate(*numbers,**digits): sum_of_numbers = 0 for _ in number: sum_of_numbers += _ for _ in digits: sum_of_numbers += digits[_] return sum_of_numbers(4) *args与**kwargs
*args 与 **kwargs是可变形参名称的通用写法,前者用来将实参打包成一个元组类型,后者用来将实参打包成一个字典类型。同学们在实际定义函数的过程中,可以沿用这种通用的写法,也可以自行定义可变参数的名称。
代码实例:
# __desc__ = 使用*args与**kwargs # 定义accumulate函数来实现累加 def accumulate(*args,**kwargs): sum_of_numbers = 0 for _ in args: sum_of_numbers += _ for _ in kwargs: sum_of_numbers += kwargs[_] return sum_of_numbers
14.3.3 对实参进行解包
在定义函数时使用*或**,是将实参收集到元组或字典中。而在调用函数时使用*或**来进行修饰,则是将实参进行解包。所谓的解包,就是将数据集合中的元素取出,然后赋值给对应的参数。为理解这样的用法,先看一段代码实例:
# __desc__ = 理解实参的解包 # 定义accumulate函数,将参数进行累加 def accumulate(number1, number2): return number1 + number2 numbers = [1,2] # 调用函数时使用*操作符对列表numbers进行修饰 sum_of_numbers = accumulate(*numbers) # sum_of_numbers的输出为3
在上文代码中,accumulate函数有两个形参,分别是number1,number2。实参numbers中一共有两个元素,将numbers进行解包后,元素值1对应的形参为number1,元素值2对应的形参为number2。那么,调用accumulate(*numbers),相当于调用accumulate(1,2)。
(1) 使用*对可迭代对象进行解包
迄今为止学过的可迭代对象有:字符串类型,列表,元组,字典,集合。在对字典,集合等类型进行解包时,解包出的元素为对应的键名。在实际开发中,通常使用**操作符对字典进行解包。
代码实例:
# __desc__ = 使用*序列结构进行解包 # 定义accumulate函数,将参数进行累加 def accumulate(param1, param2): return param1 + param2 # 1.对字符串进行解包 chars = "ab" result = accumulate(*chars) # result的输出为"ab" # 2.对列表进行解包 numbers = [1,2] result = accumulate(*numbers) # result的输出为3 # 3.对元组进行解包 numbers = (5,5) result = accumulate(*numbers) # result的输出为10 # 4.对集合进行解包 numbers = {3,-3} result = accumulate(*numbers) # result的输出为0(2) 使用**对字典进行解包
对字典进行解包时,字典中的键名与函数中的形参名一一对应,实参即该键名所对应的键值。
代码实例:
# __desc__ = 使用**字典进行解包 # 定义accumulate函数,将参数进行累加 def accumulate(x, y): return x + y numbers = {"x": 1, "y": 99} result = accumulate(**numbers) # result的输出为100字典中的键名必须与函数中的形参名一一对应,否则Python会抛出类型错误的异常信息。
代码实例:
# __desc__ = 使用**字典进行解包 # 定义accumulate函数,将参数进行累加 def accumulate(small, large): return small + large numbers = {"small": 1, "large": 99, "median": 33} result = accumulate(**numbers)在执行上文的代码时,程序抛出了类型错误的异常信息,因为字典中的键名median在accumulate函数中找不到对应的形参名。
14.3.4 知识要点
(1) 定义函数时,使用*与**操作符来定义可变参数,在调用函数时,使用*与**操作符来对参数进行解包。(2) 使用*操作符定义可变参数时,Python会将该形参位置处开始的实参收集到元组中。(3) 使用**操作符定义可变参数时,Python会将该形参位置处开始的实参收集到字典中。
14.3.5 最具实力的小班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。
(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪11K-20K, 免费领取课程大纲
(4) Python大数据分析,量化投资就业班,月薪12K-25K,免费领取课程大纲
扫码免费领取Python学习资料: