Day 9 :初识函数
Python函数:1、函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
2、函数能提高应用的模块性,和代码的重复利用率。
Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
定义函数:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。(定义时使用的参数,是形参)
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
例:
1 def quadratic_func(length,breadth ): 2 ''' 3 这是一个计算面积的函数 4 :param length: 长度 5 :param breadth: 宽度 6 :return: 面积 7 ''' 8 ret = length * breadth 9 return ret
函数的调用:
义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。
如下实例调用了quadratic_func()函数:
return :返回值的关键字是return
return的作用:
1、结束整个函数
2、能够返回相应的值
如果不写return ,默认返回None!
return也可以返回多个值,(以元组的方式返回,逗号隔开)
1、练一练:写函数,检查获取传入列表或者元组对象的所有奇数位索引对应的元素,并将其新的列表返回给调用者
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #方法1: 2 def odd_num(lis): 3 new_lis = [] 4 for i in range(len(lis)): 5 if i % 2 == 1: 6 new_lis.append(lis[i]) 7 return new_lis 8 print(odd_num([0,1,2,3,4,5,6,7])) 9 #方法2:切片 10 def odd_num(lis): 11 new_lis = lis[1::2] 12 return new_lis 13 print(odd_num([0,1,2,3,4,5,6,7]))
2、写函数,计算字符串中【数字】、【字母】、【空格】以及其他的个数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #isdigit:检测字符串是否为数字。 2 #isalpha:检测字符串是否为字母。 3 #isspace:检测字符串是否为空格 4 def examine_str(str_type): 5 digeit_num = 0 6 alpha_num = 0 7 space_num = 0 8 other_num = 0 9 for i in str_type: 10 if i.isalpha(): 11 alpha_num += 1 12 elif i.isdigit(): 13 digeit_num += 1 14 elif i.isspace(): 15 space_num += 1 16 else: 17 other_num += 1 18 return {'digeit_num':digeit_num, 19 'alpha_num':alpha_num, 20 'space_num':space_num, 21 'other_num':other_num 22 } 23 ret = examine_str('23414 16as dfjk$*((*$$') 24 print(ret)
备注:解耦在写一个函数时候,把 一个大功能尽量分成多个小功能,并且功能与功能之间影响减到最小,不宜把一个很复杂的功能写一个函数里
函数的参数
默认参数:1、如果函数调用时,没有传递默认参数,则使用函数调用时默认的值,如果传参,则使用传递的参数
位置参数:位置参数必须在前。
动态参数:*args,**kwargs.
[*] 是动态参数的标识符,args,相当于一个变量,也可以写别的,但是推荐使用args,kwargs
参数不固定时,就用动态参数
*args:代表一个数组,在python中显示为元组
**kwargs:相当于关键字参数,在Python中显示为字典模式,也可以传入字典
如果在定义函数时同时使用*args,**kwargs,作为参数,则可以接受所有参数
1 def my_test(*args,**kwargs): 2 print(args) 3 print(kwargs) 4 my_test(1,2,3,*[5,3,2],a =1 ,b =2) 5 my_test(1,2,3,5,3,2,a =1 ,b =2) 6 #2个的输出结果相同 7 ''' 8 (1, 2, 3, 5, 3, 2) 9 {'a': 1, 'b': 2} 10 (1, 2, 3, 5, 3, 2) 11 {'a': 1, 'b': 2} 12 '''
练一练:
1、写函数,传入N个数,返回字典{‘max’:最大值,‘min’:最小值}
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #例lis = [31,42,65,8,33,68] 2 dic = {} 3 min_num = lis[0]#假设 lis 0 是小值 4 max_num = lis[0]#假设 lis0 是最大值 5 for i in lis: 6 if i < min_num: 7 min_num = i 8 dic['min'] = min_num 9 elif i > max_num: 10 # 第一次和31比较,条件不成立,第二次和42比较,条件成立,则max_num = 42,添加至字典,第三次,再次循环条件再次成立, 11 # 因为key相同,再次更新字典,一次类推,找出最大值 12 max_num = i 13 dic['max'] = max_num 14 print(dic) 15 #函数写法 16 def max_min(*args): 17 min_num = args[0] 18 max_num = args[0] 19 for i in args: 20 if i < min_num: 21 min_num = i 22 elif i > max_num: 23 max_num = i 24 return {'max':max_num,'min':min_num} 25 print(max_min(123,4,2342,5,346,7))
2、写函数,计算图形面积计算圆的面积,正方形的面积,长方形的面积
调用函数(‘圆形’,圆半径) 返回圆的面积 π*半径的平方
调用函数(‘正方形’,边长) 返回正方形的面积 长的平方
调用函数(‘长方形’,长,宽) 返回长方形的面积 长*宽
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def figure_area(name,*args): 2 def rectangle(x,y): 3 return '长方形面积是',x*y 4 def square(x): 5 return '正方形面积是',x*x 6 def circle(r): 7 return '圆形面积是',3.14*r*r 8 if name == '长方形': 9 return rectangle(*args) 10 elif name == '正方形': 11 return square(*args) 12 elif name == '圆形': 13 return circle(*args) 14 else: 15 return '无法计算' 16 print(figure_area('长方形',5,20.1))
3、写函数,传入一个参数N,返回N的阶乘
例 cal(5),计算5*4*3*2*1
def my_cal(num): ret = 1 for i in range(1,num+1): ret *= i return ret print(my_cal(5))
4