为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
python进阶_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • 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了。 !就!是!说!当执行一个函数时,遇到一个内部函数定义,只是做一个定义,而不会执行这个内部函数,任何函数的执行都是需要调用语句的! 但是!如果这个内部函数用到外部函数的参数时,执行外部函数就可以理解为定义内部函数并将其中用到的外部函数引入的参数设定为引入时的值。
    查看全部
  • 排序中比较函数,-1为前者排在后者前面,0为相等,1为后者应排在前者前面
    查看全部
  • reduce (将list值逐个进行计算)
    查看全部
  • 将字母大小写转换: .upper() .lower()
    查看全部
  • 其中self.get_grade=lambda :'a' 该属性就是一个方法
    查看全部
  • 该节定义的实例方法是为了return 不能被访问的属性
    查看全部
  • O5
    加强或者检测的装饰器,内部函数总是返回要装饰的目标函数的执行结果,装饰器函数返回的函数必须是一个闭包,这是装饰器函数的特点。 还有,就是time库中的time.time()函数返回的值是当前的时间点。 记住@语法的等价语句。
    查看全部
  • O5
    另外,要让 @log 自适应任何参数定义的函数,可以利用Python的 *args 和 **kw,保证任意个数的参数总是能正常调用: def log(f): def fn(*args, **kw): print 'call ' + f.__name__ + '()...' return f(*args, **kw) return fn
    查看全部
  • O5
    定义log函数: def log(f): def fn(x): print 'call ' + f.__name__ + '()...' return f(x) return fn 若有语句: @log def q(x): ....... 执行过程如下: 1.首先将q(q函数定义式在前)当做参数传入log函数; 2.执行log(g):定义fn(x)函数,输出一个print语句,fn函数返回q(x)执行的结果,然后再返回fn这个函数给log函数; 3.执行q=log(q),即把log函数返回的结果fn函数赋给q. 最终结果是q变成了一个新的函数fn,不但具有原有函数的功能,还多了一个print语句。
    查看全部
  • O5
    装饰器: 关键字@,如事先已定义了一个f函数,且是一个闭包函数,即返回值是一个函数,则: @f def g(): ......... 等价于如下语句: def g(): .............. g = f(g) 由于f()的执行结果是返回一个函数,所以g就成为一个执行f()后返回的函数了。 可以通过编辑f里面的函数对装饰器的功能下定义,例如增强,或者检测等等。
    查看全部
  • map()是Python内置的高阶函数,它接收一个函数f和一个list,并通过把函数依次作用在list的每个元素上,得到一个新的list并返回。
    查看全部
  • O5
    匿名函数:关键字lambda 定义一个匿名函数:lambda x:表达式 ,其中x是函数的参数; 整一个匿名函数定义就是函数的返回值,可以赋予一个变量: a=lambda x:表达式 结果是a成为一个函数对象,执行a(x)就是执行一个匿名函数。 匿名函数可以简化代码。 匿名函数有个限制,就是只能有一个表达式,不写return,返回值就是该表达式的结果。
    查看全部
  • 通过实例改变类捆绑的属性,实质上并没有改变类属性。
    查看全部
  • iteritems是迭代输出字典的键值对,key + value setattr(object,name,value): 作用:设置object的名称为name(type:string)的属性的属性值为value,属性name可以是已存在属性也可以是新属性
    查看全部
  • 类属性是动态的,可以直接赋值更改
    查看全部

举报

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

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