python闯关_Day06
函数式编程
python的函数式编程,需要关注以下几个点。
1. 参数:有无参数、形参和实参的区别、参数可以是哪些类型,参数的读取顺序等。
2. 返回值:未指定的情况下,缺省是有返回值的。
按照之前的程序经验,调用函数前需要将环境参数压栈,再压入参数(PUSH),再跳转到函数,再由函数反向读取压入的参数(POP)。通过这节课的学习,python也是类似的运行逻辑。
函数返回时,需要将返回值压栈,再退出函数,由父“进程”弹出并读取压入的返回值。python有区别的是返回值的类型不是写在函数声明的那一行,而是由函数的返回值来确定的。
对于没有返回值的函数,可以理解为“方法”,调用函数的几种方法
1 语句形式:foo()
2 表达式形式:3*len('hello')
3 当中另外一个函数的参数:range(len('hello'))
在练习中,打算在函数内修改全局的字典,没有成功,作业后再试试。
练习:
1、写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作
def MyWriteFile (strfile,strContext): f = open(strfile, 'w',encoding='utf-8') f.write(strContext) f.close() strfile = input('请输入文件名:') strContext = input('请输入需要修改的内容:') MyWriteFile(strfile,strContext)
2、写函数,计算传入字符串中【数字】、【字母】、【空格】以及 【其他】的个数
def count_str(str): tmp = {} len_str = len(str) i = 0 isDig = isAlpha = isSpace = isOther = 0 while i < len_str: if str[i].isdigit(): isDig +=1 elif str[i].isalpha(): isAlpha +=1 elif str[i].isspace(): isSpace +=1 else : isOther +=1 i += 1 print("字符串:", str) print("数字的数量:",isDig) print("字母的数量:",isAlpha) print("空格的数量:",isSpace) print("其他的数量:",isSpace) str = "abcdef123 54 " count_str(str)
3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
def count(arg): if len(arg) > 5: print(arg, "的长度大于5") count('abcdddd') count([1,1,1,1]) count((1,2))
4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
def count1(arg): newarg = arg if len(arg) > 2: newarg = arg[:2] return(newarg) print(count1('abcde')) print(count1([1,2,2,3,4,5]))
5、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
def ModiList(arg): new_arg = [] i = 0 while i < len(arg): new_arg.append(arg[i]) i += 2 return(new_arg) print (ModiList((1,2,3,4,5,6,7)))
6、写函数,检查字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字符串或列表
def CutDict(**arg): for key in arg: NewValue = arg[key] if len(NewValue) > 2: NewValue = NewValue[:2] arg[key] = NewValue return(arg) arg = {"k1": "v1v1", "k2": [11,22,33,44]} arg = CutDict(**arg) print (arg)
1、写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作