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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • import time def performance(unit): def performance_decorator(f): def wrapper(*args, **kw): start = time.time() print 'call %s() in %f%s' % (f.__name__, time.time() - start, unit) return f(*args, **kw) return wrapper return performance_decorator @performance('ms') def factorial(n): return reduce(lambda x,y: x*y, range(1, n+1)) print factorial(10)
    查看全部
  • 完善decorator 在没有decorator的情况下,打印函数名: def f1(x): pass print f1.__name__ 输出: f1 有decorator的情况下,再打印函数名: def log(f): def wrapper(*args, **kw): print 'call...' return f(*args, **kw) return wrapper Python内置的functools可以用来自动化完成这个“复制”的任务: import functools def log(f): @functools.wraps(f) def wrapper(*args, **kw): print 'call...' return f(*args, **kw) return wrapper 最后需要指出,由于我们把原函数签名改成了(*args, **kw),因此,无法获得原函数的原始参数信息。即便我们采用固定参数来装饰只有一个参数的函数: def log(f): @functools.wraps(f) def wrapper(x): print 'call...' return f(x) return wrapper 也可能改变原函数的参数名,因为新函数的参数名始终是 'x',原函数定义的参数名不一定叫 'x'。
    查看全部
  • @log('DEBUG') def my_func(): pass 把上面的定义翻译成高阶函数的调用,就是: my_func = log('DEBUG')(my_func) 上面的语句看上去还是比较绕,再展开一下: log_decorator = log('DEBUG') my_func = log_decorator(my_func) 上面的语句又相当于: log_decorator = log('DEBUG') @log_decorator def my_func(): pass 所以,带参数的log函数首先返回一个decorator函数,再让这个decorator函数接收my_func并返回新函数: def log(prefix): def log_decorator(f): def wrapper(*args, **kw): print '[%s] %s()...' % (prefix, f.__name__) return f(*args, **kw) return wrapper return log_decorator @log('DEBUG') def test(): pass print test() 执行结果: [DEBUG] test()... None 对于这种3层嵌套的decorator定义,你可以先把它拆开: # 标准decorator: def log_decorator(f): def wrapper(*args, **kw): print '[%s] %s()...' % (prefix, f.__name__) return f(*args, **kw) return wrapper return log_decorator 返回decorator: def log(prefix): return log_decorator(f) 拆开以后会发现,调用会失败,因为在3层嵌套的decorator定义中,最内层的wrapper引用了最外层的参数prefix,所以,把一个闭包拆成普通的函数调用会比较困难。不支持闭包的编程语言要实现同样的功能就需要更多的代码。
    查看全部
  • object是基类
    查看全部
  • print isinstance(s, unicode) s是否为字符串格式,返回值为Ture
    查看全部
  • json是模块,直接使用导入import son simplejson是另外一个模块,但是他的函数签名和功能一样,所以可以 import simplejson as json 用来导入不同名称但是功能一样的模块。
    查看全部
  • try的作用是捕获错误,并在捕获到指定错误时执行except语句。 import error是提示报错
    查看全部
  • from 从哪儿 import引入什么。 后面打印函数为isdir和misfile,那么就是从os.path 导入isdir,misfile这两个函数。 这两个函数就是用来测试是否存在题目中的文件夹和文件。
    查看全部
  • functors.partial就是定义一个偏函数
    查看全部
    0 采集 收起 来源:python中偏函数

    2016-07-29

  • Python的特殊方法
    查看全部
  • python没有自增语法(i++) 可以用i+=1 即i=i+1
    查看全部
  • 慢慢理解
    查看全部
    0 采集 收起 来源:python中闭包

    2016-07-29

  • a, b, L = 0, 1, [] 表示定义了三个变量a b L a=0 b=1 L=[]
    查看全部
    0 采集 收起 来源:python中 __len__

    2016-07-28

  • 搞不懂。。。
    查看全部
    0 采集 收起 来源:python中闭包

    2016-07-28

  • **kw 获取的方法: for k,v in kw.iteritems: key = k value = v
    查看全部

举报

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

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