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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • math.sqrt 求平方根函数 调用之前先导入 import math
    查看全部
  • 闭包是个难点,需要重新理解!!
    查看全部
    0 采集 收起 来源:python中闭包

    2017-05-21

  • 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 因此,返回函数不要引用任何循环变量,或者后续会发生变化的变量。 s.append(f),只是将每一个f()的引用保存进了list,并没有进行对于i的计算,所以导致最后在运行了f(1)之后,i已经变为了3,所以会一样结果都为9.只要将这里改为fs.append(f())即可,这样就在这一步的时候已经进行了i*i的运算,将结果保存了,通过这一题可以注意到在python这门语言之中,f与f()的大区别。
    查看全部
    0 采集 收起 来源:python中闭包

    2018-03-22

  • map()可以接收一个函数f和一个list,并通过把函数f依次作用在list的每个元素上,得到一个新的list并返回。
    查看全部
  • def add(x,y,f) return f(x)+f(y) import math
    查看全部
  • 内层函数引用了外层函数的变量,然后返回内层函数的情况成为闭包
    查看全部
    0 采集 收起 来源:python中闭包

    2017-05-21

  • class Person(object): def __init__(self,name,gender,birth,**kw): self.name=name self.gender=gender self.birth=birth for k,v in kw.items(): setattr(self,k,v)//相当于self.k=v
    查看全部
  • 方法:问题的产生是因为函数只在执行时才去获取外层参数i,若函数定义时可以获取到i,问题便可解决。 def count(): fs = [] for i in range(1, 4): def f(i): def g(): return i*i return g fs.append(f(i)) return fs f1, f2, f3 = count() print f1(), f2(), f3() 即可
    查看全部
    0 采集 收起 来源:python中闭包

    2017-05-21

  • import time def performance(unit): def performance_decorator(f): def wrapper(*args,**kw): print 'call '+f.__name__+'() in '+str(time.time())+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)
    查看全部
  • 定义decorator def log(f): #定义装饰器高阶函数,以要装饰的函数f作为参数 def fn(x): #内部相当于重构要装饰的函数f,重命名为fn print 'call ' + f.__name__ + '()...' #加特技print return f(x) #为了不重写原来的函数f的代码,所以用return f(x)代替原来的代码。 return fn 将被装饰过的新的函数fn返回
    查看全部
  • 我的理解是lazy_sum(1, 3, 5, 7, 9)整体成了一个新名字,就和f一样,是个规则的代号 当调用lazy_sum(1, 3, 5, 7, 9)()时,才打开了函数 当数字变成lazy_sum(10, 30, 50, 70)时,变成了另一个类似的规则,lazy_sum(10, 30, 50, 70)()成了新的函数 calc_prod(lst)==lazy_prod==lazy_prod()函数的名字
    查看全部
  • math.sqrt()函数返回为浮点数,并不是整数,return math.sqrt(4)==2 为False。
    查看全部
  • 要定义关键字参数,使用 **kw; 除了可以直接使用self.name = 'xxx'设置一个属性外,还可以通过 setattr(self, 'name', 'xxx') 设置属性。
    查看全部
  • __future__的底划线为两个字符
    查看全部
  • 所有函数都是可调用对象:
    查看全部
    0 采集 收起 来源:python中 __call__

    2017-05-19

举报

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

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