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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
学习人数
综合评分9.20
575人评价 查看评价
9.6 内容实用
9.0 简洁易懂
9.0 逻辑清晰
  • 在函数内部定义的函数和外部定义的函数是一样的,只是他们无法被外部访问: def g(): print 'g()...' def f(): print 'f()...' return g 将 g 的定义移入函数 f 内部,防止其他代码调用 g: def f(): print 'f()...' def g(): print 'g()...' return g 但是,考察上一小节定义的 calc_sum 函数: def calc_sum(lst): def lazy_sum(): return sum(lst) return lazy_sum 注意: 发现没法把 lazy_sum 移到 calc_sum 的外部,因为它引用了 calc_sum 的参数 lst。 像这种内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。 闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。举例如下: # 希望一次返回3个函数,分别计算1x1,2x2,3x3: def count(): fs = [] for i in range(1, 4): def f(): return i*i fs.append(f) return fs f1, f2, f3 = count() 你可能认为调用f1(),f2()和f3()结果应该是1,4,9,但实际结果全部都是 9(请自己动手验证)。 原因就是当count()函数返回了3个函数时,这3个函数所引用的变量 i 的值已经变成了3。由于f1、f2、f3并没有被调用,所以,此时他们并未计算 i*i,当 f1 被调用时: >>> f1() 9 # 因为f1现在才计算i*i,但现在i的值已经变为3 因此,返回函数不要引用任何循环变量,或者后续会发生变化的变量。
    查看全部
    0 采集 收起 来源:python中闭包

    2018-03-22

  • 这题到处充满着函数通过一个变量传给另一个函数的意思。
    查看全部
    0 采集 收起 来源:python中闭包

    2015-03-09

  • 闭包这个思路虽然很绕,但的确是个好思路,返回函数不要引用任何循环变量,或者后续会发生变化的变量。对不变的变量引用或外部不能访问的函数。
    查看全部
    0 采集 收起 来源:python中闭包

    2015-03-09

  • 装饰器的作用
    查看全部
  • def prod(x, y): return x*y print reduce(prod, [2, 4, 5, 7, 12])
    查看全部
  • def format_name(s): return s.lower()[0].upper()+s.lower()[1::] print map(format_name, ['adam', 'LISA', 'barT']) def format_name(s): return s.capitalize() print map(format_name, ['adam', 'LISA', 'barT'])
    查看全部
  • import math def add(x, y, f): return f(x) + f(y) print add(25, 9, math.sqrt)
    查看全部
  • .不能离线哦
    查看全部
  • import time def performance(unit): def perf_decorator(f): def wrapper(*args,**kw): t1=time.time() r=f(*args,**kw) t2=time.time() t=(t2-t1)*1000 if unit=='ms' else (t2-t1) print 'call %s() in %f %s' %(f.__name__,t,unit) return r return wrapper return perf_decorator @performance('ms') def factorial(n): return reduce(lambda x,y: x*y, range(1, n+1)) print factorial(10)
    查看全部
  • 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
    查看全部
  • 当新版本的一个特性与旧版本不兼容时,该特性将会在旧版本中添加到__future__中,以便旧的代码能在旧版本中测试新特性。
    查看全部
  • 每个包又个_init_.py 文件
    查看全部
  • 调用类属性的时候必须带上类名,格式:类名.属性,不能仅仅写属性啊!而且类属性可以动态修改
    查看全部
  • 变量可以指向函数,此时变量可以当函数使用,如下 f=abs f(-20) 函数名是指向函数的变量 abs=len #此时abs的作用变为len #例子 def add(x,y,f) return f(x,y,f) #调用并具体化f函数 add(1,-2,abs)
    查看全部
  • print filter(lambda s: s and len(s.strip())>0,['test', None, '', 'str', ' ', 'END'] )
    查看全部

举报

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

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

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