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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • 1、map 2、reduce 3、filter
    查看全部
  • ''' 2-9闭包 ''' # 希望一次返回3个函数,分别计算1x1,2x2,3x3: def count(): fs = [] for i in range(1, 4): def f(): return i*i #print(id(f),f.__closure__[0].cell_contents,id(i)) fs.append(f) return fs f1, f2, f3 = count() #print(id(f1),f1.__closure__[0].cell_contents,id(f2),f2.__closure__[0].cell_contents,id(f3),f3.__closure__[0].cell_contents) print(f1(),f2(),f3()) ''' 你可能认为调用f1(),f2()和f3()结果应该是1,4,9,但实际结果全部都是 9 (请自己动手验证)。 原因就是当count()函数返回了3个函数时,这3个函数所引用的变量 i 的值 已经变成了3。由于f1、f2、f3并没有被调用,所以,此时他们并未计算 i*i, 当 f1 被调用时: ''' print(f1()) # 返回9 # 因为f1现在才计算i*i,但现在i的值已经变为3
    查看全部
    0 采集 收起 来源:python中闭包

    2016-02-23

  • ''' Python进阶2-8返回函数 ''' # 但是,如果返回一个函数,就可以“延迟计算”: def calc_sum(lst): def lazy_sum(): return sum(lst) return lazy_sum # 试试 return lazy_sum() # 调用calc_sum()并没有计算出结果,而是返回函数: f = calc_sum([1, 2, 3, 4]) # 【相当于将函数名lazy_sum赋值给变量f】 k = calc_sum([1, 2, 3, 4]) j = calc_sum([1, 2, 4, 5]) print(id(f),f.__closure__[0].cell_contents) # 再看看k和j,发现三者内存地址,__closure__属性是不同的 print(id(k),k.__closure__[0].cell_contents) print(id(j),j.__closure__[0].cell_contents) # 对返回的函数进行调用时,才计算出结果: f() # 返回10
    查看全部
    0 采集 收起 来源:python中闭包

    2016-02-23

  • 如果一个类表现得像一个list,要获取有多少个元素,就得用 len() 函数。 要让 len() 函数工作正常,类必须提供一个特殊方法__len__(),它返回元素的个数。
    查看全部
    0 采集 收起 来源:python中 __len__

    2016-02-23

  • __cmp__用实例自身self和传入的实例 s 进行比较,如果 self 应该排在前面,就返回 -1,如果 s 应该排在前面,就返回1,如果两者相当,返回 0
    查看全部
    0 采集 收起 来源:python中 __cmp__

    2016-02-23

  • 对 int、str 等内置数据类型排序时,Python的 sorted() 按照默认的比较函数 cmp 排序
    查看全部
    0 采集 收起 来源:python中 __cmp__

    2016-02-23

  • python 3.x中,iteritems()被剔除,用items();此处不能直接用self.k = v
    查看全部
  • 当实例属性和类属性重名时,实例属性优先级高
    查看全部
  • sorted()也可以对字符串进行排序,字符串默认按照ASCII大小来比较:
    查看全部
  • Python内置的 sorted()函数可对list进行排序: >>>sorted([36, 5, 12, 9, 21]) [5, 9, 12, 21, 36]
    查看全部
  • 看不懂啊
    查看全部
    0 采集 收起 来源:python中闭包

    2016-02-22

  • 闭包的特点是返回的函数还引用了外层函数的局部变量
    查看全部
    0 采集 收起 来源:python中闭包

    2016-02-22

  • 闭包(3) 闭包特点:返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。举例如下: # 希望一次返回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。因为当把函数加入fs列表里时,python还没有给i赋值,只有当执行时,再去找i的值是什么,这时在第一个for循环结束以后,i的值是3,由于f1、f2、f3并没有被调用,所以,此时他们并未计算 i*i,当 f1 被调用时: >>>print f1() 结果:9 解决方法也很简单,改写一下函数的定义就可以了。 def count(): fs = [] for i in range(1, 4): def f(x=i): return x*x fs.append(f) return fs f1, f2, f3 = count() >>>print f1() >>>print f2() >>>print f3() 结果:1 4 9
    查看全部
    0 采集 收起 来源:python中闭包

    2018-03-22

  • 闭包(2) 使用闭包注意事项: 2、一下这段代码是在python中使用闭包时一段经典的错误代码: def foo(): a=1 def bar(): a = a+1 return a return bar 这段程序的本意是要通过在每次调用闭包函数时都对变量a进行递增的操作。但在实际使用时 >>> c = foo() >>> print c() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 4, in bar UnboundLocalError: local variable 'a' referenced before assignment 这是因为在执行代码 c = foo()时,python会导入全部的闭包函数体bar()来分析其的局部变量,python规则指定所有在赋值语句左面的变量都是局部变量,则在闭包bar()中,变量a在赋值符号"="的左面,被python认为是bar()中的局部变量。再接下来执行print c()时,程序运行至a = a + 1时,因为先前已经把a归为bar()中的局部变量,所以python会在bar()中去找在赋值语句右面的a的值,结果找不到,就会报错。解决的方法很简单。 def foo(): a = [1] def bar(): a[0] = a[0]+1 return a[0] return bar 只要将a设定为一个容器就可以了。这样使用起来多少有点不爽,所以在python3以后,在a = a + 1 之前,使用语句nonlocal a就可以了,该语句显式的指定a不是闭包的局部变量。
    查看全部
    0 采集 收起 来源:python中闭包

    2018-03-22

  • 闭包 (一)定义:像这种内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。 例子: def addx(x): def adder(y): return x+y return adder >>> c = addx(8) >>> print c(10) 结果:18 结合这段简单的代码和定义来说明闭包: 如果在一个内部函数里:adder(y)就是这个内部函数, 对在外部作用域(但不是在全局作用域)的变量进行引用:x就是被引用的变量,x在外部作用域addx里面,但不在全局作用域里, 则这个内部函数adder就是一个闭包。 (二)使用闭包注意的事项 1、闭包中是不能修改外部作用域的局部变量的 def foo(): m=0 def foo1(): m=1 print m print m foo1() print m >>> foo() 结果:0 1 0 从执行结果可以看出,虽然在闭包里面也定义了一个变量m,但是其不会改变外部函数中的局部变量m。
    查看全部
    1 采集 收起 来源:python中闭包

    2018-03-22

举报

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

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