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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • import time, functools def performance(unit): def per_decorator(f): @functools.wraps(f) def wrapper(*args,**kw): t1=time.time() r=f(*args,**kw) t2=time.time() if unit=='ms': print 'call %s() in %s%s'%(f.__name__,(t2-t1)*1000,unit) else: print 'call %s() in %s%s'%(f.__name__,(t2-t1),unit) return r return wrapper return per_decorator @performance('ms') def factorial(n): return reduce(lambda x,y: x*y, range(1, n+1)) print factorial.__name__
    查看全部
  • def log(f): def wrapper(*args, **kw): print 'call...' return f(*args, **kw) return wrapper @log def f2(x): pass print f2.__name__ 可见,由于decorator返回的新函数函数名已经不是'f2',而是@log内部定义的'wrapper'。这对于那些依赖函数名的代码就会失效。decorator还改变了函数的__doc__等其它属性。如果要让调用者看不出一个函数经过了@decorator的“改造”,就需要把原函数的一些属性复制到新函数中: import functools def log(f): @functools.wraps(f) def wrapper(*args, **kw): print 'call...' return f(*args, **kw) return wrapper
    查看全部
  • import time def performance(unit): def performance_decorator(f): def wrapper(*args,**kw): t1=time.time() r=f(*args,**kw) t2=time.time() if unit=='ms': print 'call %s() in %f%s'%(f.__name__,(t2-t1)*1000,unit) else: print 'call %s() in %f%s'%(f.__name__,(t2-t1),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)
    查看全部
  • 如果一个属性以"__xxx__"的形式定义,那它又可以被外部访问了,以"__xxx__"定义的属性在Python的类中被称为特殊属性,有很多预定义的特殊属性可以使用,通常我们不要把普通属性用"__xxx__"定义。 以单下划线开头的属性"_xxx"虽然也可以被外部访问,但是,按照习惯,他们不应该被外部访问。
    查看全部
  • Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问。
    查看全部
  • #编辑一个函数calc_prod(),返回一个能够计算一个list所有元素乘积的函数。 def calc_prod(lst):#外层函数要写上形式参数 def motiply():#内层的参数不要带参数了,加上形式参数,就变成了直接返回数值了,不是返回函数了。 def f1(x,y):#最内层的作为reduce()函数参数的函数f1,因为调用到reduce时是需要直接返回数值的,所以要加上参数x,y。 return x*y return reduce(f1,lst) return motiply()#返回值为一个函数,函数不要带参数。如果直接返回函数值,则会写成:return motiply(lst)。 f = calc_prod([1, 2, 3, 4]) print f#输出的是一个值,写成f()就会出错。
    查看全部
  • import time def performance(f): def fn(*args,**kw): t1=time.time() r=f(*args,**kw) t2=time.time() print 'call %s() in %fs' %(f.__name__,(t2-t1)) return r return fn @performance def factorial(n): return reduce(lambda x,y: x*y, range(1, n+1)) print factorial(10)
    查看全部
  • Python 匿名函数 lambda x: 函数体
    查看全部
  • pypi.python.org
    查看全部
  • 包下面有一个_init_.py文件,每一层都必须有!即使该文件是空的。
    查看全部
  • 包就是文件夹 模块就是XXX.py文件 包也可以有多级
    查看全部
  • sorted函数有四个参数,sorted(iterable, cmp=None, key=None, reverse=False) 可以看到其中第一个参数是可迭代对象,后面的参数都是具有默认值的,重点阐述如下: 1、cmp,比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0 2、key,主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序 3、reverse,是否反转,默认情况下不反转 由此看来我们的偏函数后面就必须为cmp,key或者reverse这三个 对于第一个:偏函数可以不用传后面的参数,但是如果传入后面的参数时就需要手动添加默认值 对于第二个:因为偏函数中的除了第一个参数外,其他剩下的参数其实就是第一个参数(其实是个函数)的可选参数(比如int2=functool.partial(int,base=2),后面的base参数其实是int()函数的一个可选参数),而如果你只传了一个匿名函数,而没有赋值给cmp,key或者reverse的话,sorted更本就不认识,所以仍然会报错
    查看全部
    0 采集 收起 来源:python中偏函数

    2017-10-11

  • def cmp_ignore_case(s1, s2): s1=s1.upper() s2=s2.upper() if s1<s2: return -1 elif s1>s2: return 1 return 0 list=['bob', 'about', 'Zoo', 'Credit'] print sorted(list, cmp_ignore_case)
    查看全部
  • 有些时候,我们不需要显式地定义函数,直接传入匿名函数更方便。>>> map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]) [1, 4, 9, 16, 25, 36, 49, 64, 81] 关键字lambda 表示匿名函数,冒号前面的 x 表示函数参数。 匿名函数有个限制,就是只能有一个表达式,不写return,返回值就是该表达式的结果。
    查看全部
  • 有些时候,我们不需要显式地定义函数,直接传入匿名函数更方便。>>> map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]) [1, 4, 9, 16, 25, 36, 49, 64, 81] 关键字lambda 表示匿名函数,冒号前面的 x 表示函数参数。 匿名函数有个限制,就是只能有一个表达式,不写return,返回值就是该表达式的结果。
    查看全部

举报

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

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