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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • python中闭包 在函数内部定义的函数和外部定义的函数是一样的,只是他们无法被外部访问: 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

  • python定义的一部分特殊方法
    查看全部
  • def log(f): def fn(*args, **kw): print 'call ' + f.__name__ + '()...' return f(*args, **kw) return fn
    查看全部
  • : s.strip(rm) 删除 s 字符串中开头、结尾处的 rm 序列的字符。 当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' '),如下: a = ' 123' a.strip() 结果: '123' a='\t\t123\r\n' a.strip() 结果 ‘123’
    查看全部
  • 动态语言调用实例方法,不检查类型,只要方法存在,参数正确,就可以调用。
    查看全部
    0 采集 收起 来源:python中多态

    2017-03-15

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

    2017-03-15

  • ,函数调用不需要传入 self,但是方法调用需要传入 self。 方法()-》()里面的self省略了而已
    查看全部
  • python 是动态语言
    查看全部
  • from __future__ import division // isinstance(s,unicode) isinstance(3,int)
    查看全部
  • 因为Python是动态语言,解释执行,因此Python代码运行速度慢。 如果要提高Python代码的运行速度,最简单的方法是把某些关键函数用 C 语言重写,这样就能大大提高执行速度。 StringIO,cStringIO try: from cStringIO import StringIO except ImportError: from StringIO import StringIO
    查看全部
  • c:\pythonx.xScripts 而不是c:\pythonx.xScripts\pip之类的
    查看全部
  • import math from math import pow, sin, log from logging import log as logger # logging的log现在变成了logger pow(2, 10) sin(3.14) log(10)
    查看全部
  • 在子类中初始化父类的数据 super(Student, self).__init__(name, gender)
    查看全部
  • 1.获取对象的数据类型:isinstance(p,Person) 2.获取变量的类型:type() eg:type(123)----<type 'int'> 返回type对象 3.获取变量的所有属性:dir() eg:dir(s)----->获取变量s的所有属性,比如name,gender,score,whoAmI等。返回的是一个字符串列表,注意方法whoAmI也是s的一个属性。 想要查找出自己定义的属性,可以借助filter() 4.已知属性名称,想查询某变量该属性,采用getattr(s,'name') 已知属性名称,想设置某对象的属性,采用setattr(s,'name','GD') 如果该对象没有属性比如age,就会报错
    查看全部
  • import types def fn_get_grade(self): if self.score >= 80: return 'A' if self.score >= 60: return 'B' return 'C' class Person(object): def __init__(self, name, score): self.name = name self.score = score p1 = Person('Bob', 90) p1.get_grade = types.MethodType(fn_get_grade, p1, Person) print p1.get_grade()
    查看全部

举报

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

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