day009 认识函数(一)
一、函数
个人认为是为了实现某个功能的一段代码。python中函数分内置函数和自定义函数
1 # len() 2 s = '金老板小护士' 3 len(s)
1 # 自定义函数 my_len() 2 3 def my_len(): 4 i = 0 5 for k in s: 6 i += 1 7 print(i) 8 9 length = my_len() 10 print(length)
二、函数的组成
1 # 自定义函数 my_len() 2 3 def my_len(): # def 定义符 my_len(参数) 函数名 4 # 函数体 5 i = 0 6 for k in s: 7 i += 1 8 return i # 返回值 9 10 length = my_len() # 调用函数 11 12 print(length)
(一)返回值 return
返回值的3种情况
没有返回值 —— 返回None
不写return
只写return:结束一个函数的继续
return None —— 不常用
返回1个值
可以返回任何数据类型
只要返回就可以接收到
如果在一个程序中有多个return,那么只执行第一个
返回多个值
用多个变量接收:有多少返回值就用多少变量接收
用一个变量接收: 得到的是一个元组
(二)参数
形参:(定义函数的时候 )
位置参数 : 必须传。
*args :可以接收任意多个位置参数。 接收的是按照位置传参的值,组织成一个元组
默认参数 : 可以不传。参数名 = '默认的值'
**kwargs : 可以接收多个关键字参数。接受的是按照关键字传参的值,组织成一个字典
实参:按照位置传参,按照关键字传参(调用函数的时候,占用内存地址)
顺序:位置参数,*args,默认参数,**kwargs
三、作业
1、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
1 def func(l): 2 new = l[1::2] 3 return new 4 5 print([1, 2, 3, 4, 5, 6])
2、写函数,判断用户传入的值(字符串、列表、元组)长度是否大于5。
1 def func(s): 2 if len(s) > 5: 3 return 1 4 else: 5 return 0 6 7 8 print("abcd")
3、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
1 def func(l): 2 if len(l) > 2: 3 rerutn l[0:2] 4 5 6 print(func([1,2,3,4]))
4、写函数,计算传入字符串中【数字】、【字母】、【空格】 以及 【其他】的个数,并返回结果。
1 def func(s): 2 dic = {"num": 0, "alpha": 0, "space": 0, "others":0} 3 for i in s: 4 if i.isdigit(): 5 dic["num"] += 1 6 elif i.isalpha(): 7 dic["alpha"] += 1 8 elif i.isspace(): 9 dic["space"] += 1 10 else: 11 dic["others"] += 1 12 13 return dic 14 15 print(func("+0-0sk ahe817ja shf wet1"))
5、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。
1 def func(x): 2 if type(x) is str and x: #参数是字符串 3 for i in x: 4 if i == ' ': 5 return True 6 elif x and type(x) is list or type(x) is tuple: #参数是列表或者元组 7 for i in x: 8 if not i: 9 return True 10 elif not x: 11 return True 12 13 print(func([]))
6、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字符串或列表
1 def func(d): 2 for k in d: 3 if len(d[k]) > 2: 4 d[k] = d[k][0:2] 5 return d 6 7 8 dic = {"k1": "v1v1", "k2": [11,22,33,44]}
7、写函数,接收两个数字参数,返回比较大的那个数字。
1 def my_max(a, b): 2 return a if a > b else b 3 4 5 6 print(my_max(1, 5))
8、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(进阶)
1 def func(filename,old,new): 2 with open(filename, encoding='utf-8') as f, open('%s.bak'%filename, 'w', encoding='utf-8') as f2: 3 for line in f: 4 if old in line: # 班主任:星儿 5 line = line.replace(old,new) 6 # 写文件 7 f2.write(line) # 小护士:金老板 8 9 import os 10 os.remove(filename) # 删除文件 11 os.rename('%s.bak'%filename, filename) # 重命名文件

浙公网安备 33010602011771号