一、函数复习
- 练习题:调用函数输出结果
#def 申明一个函数,第一个是默认参数,第二个参数是一个默认值为[]的列表 def f(x,l=[]): for i in range(x): l.append(i*i) print(l)
f(2) #解析: #传入参数:f=2,l[] #输出:range(2)的平方追加到l[]中,结果也就是[0,1] f(3,[3,2,1]) #解析: #传入参数:3,l[3,2,1] #输出:range(3)的平方追加到l[]中,l[]中已存在[3,2,1],输出结果也就是:[3,2,1,0,1,4] f(3) #解析: #传入参数3,l[0,1] 由于l[]内存地址中已经记录了l[0,1],所以l是l[0,1]。如 #输出结果[0,1,0,1,4] #规范写法:就算是传入参数为空也需要定义 f(x=3, l=[]) # 结果: [0, 1, 4]
- 函数中的关键字:def:定义函数 return:返回值 pass 占位符 exit(1):退出程序
print 和return的区别:return为返回值,print为在函数中打印
pass和exit的区别:pass为占位符pass代码后面有代码还会继续执行,而exit()为直接退出程序:
def l(): pass print("111") def l2(): exit() print("2222") #会打印“111” l() #没有输出 l2()
- 函数的参数:*args tuple类型对应赋值 **kwargs dict类型参数对应赋值
- 匿名函数:
add = lambda x,y:x+y
二、高阶函数
- 高阶函数:python内置函数,可以把函数当做参数传递的一种函数。
高阶函数一般使用的比较少
高阶函数都是可以通过代码逻辑实现的,但是没有高阶函数效率高 - map函数
#参数: 函数,list #返回:把list中的值传入到函数中,然后返回函数处理完的结果 def testMap(x): print(x * x) print(list(map(testMap,[1,4,8])))
- filter函数
#filter函数 #参数:函数,list #对列表中每个元素进行判断,返回一个符合条件的list f = list(filter(lambda x:x % 2 ==1,range(1,10)))
print(f)
- reduce函数
#reduce函数 #参数:函数,list #把list前两位元素传递给函数,第二次调用时把前两位的计算结果当成第一个参数,list的第三位元素当做第二个参数,后面的以此类推 def add(x,y): return x + y result2 = reduce(add,[1,3,4,23]) print(result2)
- sorted函数 比较常用的函数
#sorted函数 #参数:可迭代对象,key 对什么进行排序,reverse : bool类型,如果为true为反序, 默认为false #print(sorted([1,2323,1,123,3,44],reverse=True)) #使用sorted函数对字典进行排序 m = dict(a=1,b=22,c=9,d=4) #使用items把所有的元素遍历出来 print(sorted(m.items())) #使用匿名函数指定m[1]也就是value进行排序 print(dict(sorted(m.items(),key=lambda x:x[1])))
三、列表生成式和列表生成器
- 列表生成式:生成列表的表达式可以快速的生成列表,代码却很简洁。
- 格式:
生成式:[exp for val in collection if condition]
生成器:(exp for val in collection if condition)
#列表生成式:
lb = [x for x in range(1,10)] #列表生成器: lb = (x for x in range(1,10))
- 如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通的函数而是一个列表生成器
def test(): a = 1 for i in range(1, 10): yield i # return i a += 1 # return i #return和yield的区别 # yield 可以理解成return,但是比return多一些角色 # yiele 每次都返回,但是下一次取值时,从上一次yield的下一行开始
m = test()
print(m)
四、练习题
需求:把/etc/passwd 文件通过uid进行排序并生成一个新文件
#练习题:把/etc/passwd 文件通过uid进行排序并生成一个新文件 result = "" with codecs.open("passwd", "r") as f: #步骤:1、通过文件操作方法readlines()把文件内容读取出来,返回一个list # 2、使用sorted高阶函数对读取出来的list进行排序,使用key参数指定以UID进行排序 #3、把排序结果写入到新的文件中 result = sorted(f.readlines(), key=lambda item: int(item.split(":")[2])) with codecs.open("sortPasswd", "w") as f: f.writelines(result)