Python学习-0415

一、函数复习

  • 练习题:调用函数输出结果

#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])
#解析:
#传入参数:3l[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],所以ll[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
#returnyield的区别
# 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)

阅读更多
想对作者说点什么? 我来说一句

dell错误代码

2014年10月30日 689KB 下载

Python学习手册.pdf

2018年03月30日 94.65MB 下载

没有更多推荐了,返回首页

不良信息举报

Python学习-0415

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭