为了账号安全,请及时绑定邮箱和手机立即绑定

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
学习人数
综合评分9.17
571人评价 查看评价
9.6 内容实用
9.0 简洁易懂
8.9 逻辑清晰
  • 声明:s为字符串,rm为要删除的字符序列 s.strip(rm) 删除s字符串中开头、结尾处,位于 rm删除序列的字符 s.lstrip(rm) 删除s字符串中开头处,位于 rm删除序列的字符 s.rstrip(rm) 删除s字符串中结尾处,位于 rm删除序列的字符 注意: 当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' ') 去掉 文本中句子开头与结尾的符号的。因为在文本中每行开头都有个"/n",代表换行。(印象中是这样的) 一般是 for line in file: line.strip().split() 这样就把每行的每个字符一个个分开,变成一个list。
  • import time #调用函数参数 def performance(f): #定义装饰器函数 def fn(*args,**kw): #定义接收任何参数的子函数 t1=time.time() #获取当前电脑时间 r=f(*args,**kw) #传入并运行factorial()函数 t2=time.time() #获取当前电脑时间 print 'call %s() in %fs' % (f.__name__,(t2-t1)) #%s表示该位置应填入字符串,%f表示该位置应填入浮点型数字(即包含小数尾数的数字),()和s没任何意义(还是()和s),(f.__name__,(t2-t1))以元组形式表示需要填入的字符串(本处f.__name__=factorial)和浮点型数字 return r #返回执行factorial()函数后的值 return fn #返回子函数fn @performance #定义装饰器 def factorial(n): #定义原函数factorial() return reduce(lambda x,y: x*y, range(1, n+1)) #以匿名函数定义原函数运算规则和返回值 print factorial(10) #此时的factorial经过装饰器@performance包装,已经是performance(factorial),该命令等价于 print performance(factorial)(10) #输出fn()运算结果:1、给出装饰器添加的部分:call factorial() in 0.0000s;2、给出原函数factorial(10)元算结果,3628800
  • @property---这是关键字,固定格式,能让方法当“属性”用。 @score.setter---前面的"score"是@property紧跟的下面定义的那个方法的名字,"setter"是关键字,这种“@+方法名字+点+setter”是个固定格式与@property搭配使用。
  • O5
    这一节花了很长时间,搞清楚几个函数执行上的容易忽略的地方。 先上自己的代码: import time def performance(unit): def f(k): def g(*args,**kw): t1=time.time() k(*args,**kw) t2=time.time() if unit=='ms': t=(t2-t1)*1000 else: t=(t2-t1) print 'call %s() in %f %s'%(k.__name__,t,unit) return k(*args,**kw) return g return f @performance('ms') def factorial(n): return reduce(lambda x,y: x*y, range(1, n+1)) print factorial(10) 1.@performance('ms') def factorial(n):............这两个语句,实际上就是: q=performance('ms') #把f的定义赋给q,并且f内的unit被初始化为‘ms' factorial=q(factorial) #调用q函数(也即半初始化的f函数),即执行f函数里面的语句,并且g内的k被初始化为factorial函数然后把g的定义赋给factorial。 注意深刻理解注释,重点是理解装饰器内的函数如果没有调用,就不会执行,而执行外层函数的时候,内层函数是不会执行的,可以理解为外部函数的算法是定义一个函数(只是定义,只是定义,只是定义,重要的事情说三遍),然后就return了。 !就!是!说!当执行一个函数时,遇到一个内部函数定义,只是做一个定义,而不会执行这个内部函数,任何函数的执行都是需要调用语句的! 但是!如果这个内部函数用到外部函数的参数时,执行外部函数就可以理解为定义内部函数并将其中用到的外部函数引入的参数设定为引入时的值。
  • 函数式: functional 一种编程范式。 函数式编程的特点: 1.把计算视为函数而非指令 2.春函数式编程:不需要变量,没有变量,测试简单 3.支持高阶函数,代码简洁 Python支持的函数式编程: 1.不是纯函数式编程:允许有变量 2.支持高阶函数:函数也可以作为变量传入 3.支持闭包:有了闭包 就能返回函数 4.有限度的支持匿名函数
  • 多重继承的目的是从两种继承树中分别选择并继承出子类,以便组合功能使用。 举个例子,Python的网络服务器有TCPServer、UDPServer、UnixStreamServer、UnixDatagramServer,而服务器运行模式有 多进程ForkingMixin 和 多线程ThreadingMixin两种。 要创建多进程模式的 TCPServer: class MyTCPServer(TCPServer, ForkingMixin) pass 要创建多线程模式的 UDPServer: class MyUDPServer(UDPServer, ThreadingMixin): pass 如果没有多重继承,要实现上述所有可能的组合需要 4x2=8 个子类。
  • 在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 functools 模块里,如果想要使用它,则需要通过引入 functools 模块来调用 reduce() 函数:

    from functools import reduce


  • map()----返回一个List列表,接收单个参数map(f(*),List)

    reduce()---返回一个List列表,接收两个参数reduce(f(*,*),List)

    filter()---返回一个筛选之后List,接收单个参数filter(f(*),List)

    sorted()---自然排序返回List列表,可以接收多个参数,sorted(List,cmp,key)


  • # 基础知识回顾

    1. Python 发源、历史

    2. 安装 Python 环境

    3. 变量和数据类型:Python 内置的基本类型(整数、浮点数、字符串、布尔值、空值)

    4. List 和 Tuple:顺序的集合类型

    5. 条件判断和循环:控制程序流程

    6. Dict 和 Set:根据 key 访问的集合类型

    7. 函数:定义和调用函数

    8. 切片:如何对 list 进行切片

    9. 迭代:如何用 for 循环迭代集合类型

    10. 列表生成式:如何快速生成列表


    # 将要学习的内容

    1.  函数式编程

    2.  模块

    3. 面向对象编程:面向对象的概念、属性、方法、继承、多态等

    4. 定制类:利用 Python 的特殊方法定制类


    # 学习目标

    1. 掌握函数式编程

    2. 掌握面向对象编程

    3. 能够编写模块化的程序


  • pass作用 1、空语句 2、保证格式完整 3、保证语义完整
  • 实例方法和类方法最主要的区别在于,定义类方法主要是要加一个装饰器,@classmethod 而实例方法没有这个装饰器 在调用上的区别在于,实例方法要先实例化一个对象再调用这个实例化方法,而类方法不需要有类的实例,直接类名.方法名就可以调用。 实例方法至少有一个参数,通常用self,这个参数里面是这个实例本身。类方法至少有一个参数,通常用cls,这个参数里面是这个类本身。 实例方法由于有实例,所以实例的属性对其实可见的,但类方法显然没有属性。 本质上来讲,类方法和实例方法没有本质区别,只不过在调用的时候,实例方法把这个实例本身当做参数传过去了。 class myclass: @classmethod def classMethod(cls): print('class method') print('parameter : %s'%cls) pass def instanceMethod(self): print('instance method') print('parameter : %s' % self) pass m=myclass() m.instanceMethod()#实例来调用实例方法 myclass.classMethod()#类名.方法名调用类方法 myclass.instanceMethod(m)#类名.方法名,并将实例作为参数传入,和实例调用实例方法一样
  • 装饰器”(Decorator): decorator可以接受一个函数作为参数,并返回一个新函数 def f1(x): #定义一个函数f1 return x*2 def new_fn(g): #这就是装饰器函数 def fn(x): print ('call %s()' %g.__name__) #g.__name__:代码作用提取函数名称 return g(x) return fn 装饰器函数的调用: g1 = new_fn(f1) #用装饰器函数对函数f1装饰,并将return 的新函数赋予g1 print g1(5) #调用函数g1,并计算5. 方法二 f1 = new_fn(f1) #将return 的新函数赋予f1,此时f1的原始定义被彻底隐藏。 print f1(5) 结果: call f1() 25 关于装饰器的调用:Python的@语法,把decorator置于函数的定义处: @new_fn def f1(x): retunr x*2 把@new_fn放到f1()函数的定义处,相当于执行了语句: f1 = new_fn(f1) 等同于上面所述的方法二
  • 导入模块math后为何引用sqrt时还要加math: math是包含各种函数或方法的模块,若前面是import math, 引用模块中的函数就要用格式math.sqrt()。 若想省略前面的模块名,在前面导入时用from math import *
  • 介绍看懂了,但是题目没有看懂,以后回看

举报

0/150
提交
取消
课程须知
本课程是Python入门的后续课程 1、掌握Python编程的基础知识 2、掌握Python函数的编写 3、对面向对象编程有所了解更佳
老师告诉你能学到什么?
1、什么是函数式编程 2、Python的函数式编程特点 3、Python的模块 4、Python面向对象编程 5、Python强大的定制类
意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!