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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
学习人数
综合评分9.20
575人评价 查看评价
9.6 内容实用
9.0 简洁易懂
9.0 逻辑清晰
  • # 希望一次返回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

  • 在函数内部定义的函数和外部定义的函数是一样的,只是他们无法被外部访问,可以用于权限控制. 考察上一小节定义的 calc_sum 函数: def calc_sum(lst): def lazy_sum(): return sum(lst) return lazy_sum 注意: 发现没法把 lazy_sum 移到 calc_sum 的外部,因为它引用了 calc_sum 的参数 lst。 像这种内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure). 闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。
    查看全部
    0 采集 收起 来源:python中闭包

    2015-04-05

  • 函数名是变量,是指向了一个对象的变量。如果想要直接 print f()打印出结果,达到延迟计算的目的,而不需要再次传入参数,那么定义在内部的函数首先不能有参数传入,否则会返回一个未定式,也即一个待执行的函数;其次,返回的内部函数指针其实指向了一个常量(或常量表达式),如例子中的reduce(...),结果已经固定了
    查看全部
  • python list中append()与extend()用法 (2011-12-21 15:06:30)转载▼ 标签: 杂谈 分类: python 列表是以类的形式实现的。“创建”列表实际上是将一个类实例化。因此,列表有多种方法可以操作。 1. 列表可包含任何数据类型的元素,单个列表中的元素无须全为同一类型。 2. append() 方法向列表的尾部添加一个新的元素。只接受一个参数。 3. extend()方法只接受一个列表作为参数,并将该参数的每个元素都添加到原有的列表中。 ********************************************************************************************************************** append()用法示例: >>> mylist = [1,2,0,'abc'] >>> mylist [1, 2, 0, 'abc'] >>> mylist.append(4) >>> mylist [1, 2, 0, 'abc', 4] >>> mylist.append('haha') >>> mylist [1, 2, 0, 'abc', 4, 'haha'] >>> ********************************************************************************************************************** extend()用法示例: >>> mylist [1, 2, 0, 'abc', 4, 'haha'] >>> mylist.extend(['lulu']) >>> mylist [1, 2, 0, 'abc', 4, 'haha', 'lulu'] >>> mylist.extend([aaa,'lalalala']) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'aaa' is not defined >>> mylist.extend(['123123','lalalala'])
    查看全部
    0 采集 收起 来源:python中 __len__

    2018-03-22

  • a, b, L = 0, 1, [] for n in range(num): L.append(a) a, b = b, a + b self.numbers = L def __str__(self): return str(self.numbers) __repr__ = __str__ def __len__(self): return len(self.numbers)
    查看全部
    0 采集 收起 来源:python中 __len__

    2015-04-05

  • 1.p1.get_grade 返回的是一个函数对象,但这个函数是一个绑定到实例的函数,p1.get_grade() 才是方法调用 2.因为方法也是一个属性,所以,它也可以动态地添加到实例上,只是需要用 types.MethodType() 把一个函数变为一个方法 3.p1.get_grade 返回的是一个函数对象,但这个函数是一个绑定到实例的函数,p1.get_grade() 才是方法调用 4.用 types.MethodType() 把一个函数变为一个方法,因为方法也是一个属性,它也可以动态地添加到实例上 p1.get_grade = types.MethodType(fn_get_grade, p1, Person)
    查看全部
  • 1.实例的方法就是在类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身,其他参数和一个普通函数是完全一样的 class Person(object): def __init__(self, name): self.__name = name def get_name(self): return self.__name get_name(self) 就是一个实例方法,它的第一个参数是self。__init__(self, name)其实也可看做是一个特殊的实例方法。 2.调用实例方法必须在实例上调用 p1 = Person('Bob') print p1.get_name() 3.如果外部需要访问私有属性,可以通过方法调用获得,这种数据封装的形式除了能保护内部数据一致性外,还可以简化外部调用的难度
    查看全部
  • 如果要限制添加的属性,例如,Student类只允许添加 name、gender和score 这3个属性,就可以利用Python的一个特殊的__slots__来实现。
    查看全部
    0 采集 收起 来源:python中 __slots__

    2015-04-05

  • 内置函数cmp(x, y),比较两个对象,如果x < y, 返回-1, x > y返回1,相等返回0
    查看全部
  • 示例代码: filter() 接收的函数必须判断出一个数的平方根是否是整数,而 math.sqrt()返回结果是浮点数。 参考代码: import math def is_sqr(x): r = int(math.sqrt(x)) return r*r==x print filter(is_sqr, range(1, 101))
    查看全部
  • filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list 注意: s.strip(rm) 删除 s 字符串中开头、结尾处的 rm 序列的字符。 当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' '),如下: a = ' 123' a.strip()
    查看全部
  • 常用装饰器
    查看全部
  • reduce()函数接收的参数和 map()类似,一个函数 f,一个list. reduce()函数行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值. 例如,编写一个f函数,接收x和y,返回x和y的和: def f(x, y): return x + y 调用 reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算: 先计算头两个元素:f(1, 3),结果为4; 再把结果和第3个元素计算:f(4, 5),结果为9; 再把结果和第4个元素计算:f(9, 7),结果为16; 再把结果和第5个元素计算:f(16, 9),结果为25; 由于没有更多的元素了,计算结束,返回结果25。 上述计算实际上是对 list 的所有元素求和。虽然Python内置了求和函数sum(),但是,利用reduce()求和也很简单。 reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算: reduce(f, [1, 3, 5, 7, 9], 100) 结果将变为125,因为第一轮计算是: 计算初始值和第一个元素:f(100, 1),结果为101。
    查看全部
  • Student类的__slots__只需要包含Person类不包含的score属性即可。
    查看全部
    0 采集 收起 来源:python中 __slots__

    2015-04-05

  • def cmp_ignore_case(s1, s2): u1=s1.upper() u2=s2.upper() if u1<u2: return -1 if u1>u2: return 1 return 0 print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)
    查看全部

举报

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

微信扫码,参与3人拼团

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

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