函数式编程
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、写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作