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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
学习人数
综合评分9.20
575人评价 查看评价
9.6 内容实用
9.0 简洁易懂
9.0 逻辑清晰
  • 导入模块math后为何引用sqrt时还要加math: math是包含各种函数或方法的模块,若前面是import math, 引用模块中的函数就要用格式math.sqrt()。 若想省略前面的模块名,在前面导入时用from math import *
    查看全部
  • 介绍看懂了,但是题目没有看懂,以后回看
    查看全部
    4 采集 收起 来源:python中多态

    2017-02-06

  • 先来弄懂例子 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 = count() 这个代码是什么意思,最开始理解为:把count()赋值给f1,f2,f3,即等同于 f1 = count() f2 = count() f3 = count() 而这种理解是错误的。因为count最后返回的是fs,fs是一个list,其中有三个元素,而这个代码的意思是把这三个元素分别赋值给f1,f2,f3.所以最后f1f2f3返回的是数字,而不是list。 为什么最后f1f2f3返回的数字是一样的,因为在函数里,最后添加到fs的是什么,是一个f函数,而不是最终的值,如果是添加最终值,应该是fs.append(f())并且这三个f函数中都引用了同一个变量i,而变量i是可变的,在最后调用这个函数的时候才把值展示,这样的话就会导致,在最后调用这个f函数的时候i是等于3的,所以就出现了f1f2f3三个值相等的情况。
    查看全部
    4 采集 收起 来源:python中闭包

    2017-01-15

  • 感觉我的比他的简单耶
    查看全部
  • *args可以当作可容纳多个变量组成的tuple **kw可以当作容纳多个key和value的dict 同时使用*args和**kws时,必须*args参数列要在**kw前
    查看全部
  • 记得调用数学函数时应该加入:import math

    然后平方根的三种表达方法别忘记。。。

    第一种调用math函数库    math.sqrt

    第二种调用内置函数库      pow(x,0.5)

    第三种直接利用**            x**0.5


    查看全部
  • map()函数不改变原有的 list,而是返回一个新的 list。

    s.capitalize()第一个大写,其他全部小写

    print(str.upper())          # 把所有字符中的小写字母转换成大写字母
    print(str.lower())          # 把所有字符中的大写字母转换成小写字母
    print(str.capitalize())     # 把第一个字母转化为大写字母,其余小写
    print(str.title())          # 把每个单词的第一个字母转化为大写,其余小写


    查看全部
  • import time    #调用函数参数

    def performance(f):    #定义装饰器函数

        def fn(*args,**kw):    #定义接收任何参数的子函数

            t1=time.time()    #获取当前电脑时间

            r=f(*args,**kw)   #传入并运行factorial()函数

            t2=time.time()    #获取当前电脑时间

            print 'call %s() in %fs' % (f.__name__,(t2-t1))

    #%s表示该位置应填入字符串,%f表示该位置应填入浮点型数字(即包含小数尾数的数字),()和s没任何意义(还是()和s),(f.__name__,(t2-t1))以元组形式表示需要填入的字符串(本处f.__name__=factorial)和浮点型数字

            return r    #返回执行factorial()函数后的值

        return fn    #返回子函数fn

    @performance    #定义装饰器

    def factorial(n):   #定义原函数factorial()

        return reduce(lambda x,y: x*y, range(1, n+1))    #以匿名函数定义原函数运算规则和返回值

    print factorial(10)    #此时的factorial经过装饰器@performance包装,已经是performance(factorial),该命令等价于 print performance(factorial)(10)

    #输出fn()运算结果:1、给出装饰器添加的部分:call factorial() in 0.0000s;2、给出原函数factorial(10)元算结果,3628800


    查看全部
  • 带参数的decorator需要三层嵌套,是因为: 最里一层,必然是一个参数列表为(*args,**kw)的wrapper,执行自身逻辑与运行目标函数,返回的是目标函数的执行结果; 倒数第二层,必然是一个参数列表为(f)的函数,用来接受目标函数,以供wrapper调用(闭包),并返回wrapper; 如果是无参数decorator,这时已经够了,python解释器会自动把@decorator转换成 f=decorator(f); 但如果是有参数decorator,还需要最后一层,因为还有一个decorator自身的参数要传递以供内部闭包使用。因此,最外一层就是decorator,参数列表为decorator自身需要的参数列表,返回的其实还是内部的wrapper。(因为外两层只为传递参数,并没有自身逻辑实现)

    查看全部
  • %是格式化的意思,%s是格式化字符串,%f是格式化浮点数,%c是格式化字符 >>>print 'call %s() in %fs' % (f.__name__, (t2 - t1)) 这句话的意思是把f.__name__插入到了%s这个位置,(t2-t1)计算后的值插入到了%f这个位置
    查看全部
  • calc_prod返回了一个不带参数的函数lazy_prod(), lazy_prod()这个函数返回了一个经过reduce()计算后的结果,就是最终计算出来的值。 f = calc_prod([1, 2, 3, 4])的执行结果是函数lazy_prod的引用,也就是所f就是calc_prod的返回值,是一个函数。 最后f()才真正调用了上一步返回的函数,执行了reduce并返回最后的结果。 这里其实用到的就是闭包,函数内部的函数可以访问外部函数的局部变量,包括参数。 并且返回一个新的函数。
    查看全部
  • f1, f2, f3 = count()中为何要有3个元素f1, f2, f3?因为count()返回的是fs,而fs是什么?是列表。什么列表?有3个元素的列表。为什么有3个元素?因为for语句的rang(1,4)。所以相当于 f1,f2,f3=[ 值,值 ,值 ]。所以f1, f2, f3中你不能多写一个f4或少写f1, f2, f3其中任何一个,因为你要分别匹配[ 值,值 ,值 ]3个。好,现在我问你列表里的值是什么?是[1,4,9]?哈哈,错了,不是,你可以看到r输出的是<function count.<locals>.f.<locals>.g at 0x10067bae8> 之类的(有3个)。我们来分析r = f(i)。首先第一个循环,i=1,那就是f(1),请问f(1)返回的给r的是什么?看到return g没有?是g,也就是g()函数的地址,f1-->r-->g,f1指向的是g的地址。剩下的i=2、i=3一样。所以r就是g()函数的地址。fs.append(r)就是将r追加到列表fs[]中,所以输出r你看到的是以下输出: [<function count.<locals>.f.<locals>.g at 0x10067bae8>, <function count.<locals>.f.<locals>.g at 0x10067ba60>, <function count.<locals>.f.<locals>.g at 0x10067bb70>] 看到了吗?[地址,地址,地址]。ps:g的地址为什么不同?因为你创建循环3次调用了f(),自然调用了3次g() 终于最后一步了:print(f1(),f2(),f3()),你会问为什么f1还要加上()。f1指向的是g的地址,所以f1()表示什么?表示是g()。i=1,传参数给j。所以g()就返回1*1(return j * j)。同理f2()=2*2,f3()=3*3.
    查看全部
    3 采集 收起 来源:python中闭包

    2018-03-22

  • 正确的写法: class C(A, B) def __init__(self, a, b): A.__init__(self, a) B.__init__(self, b) 建议养成习惯,不要使用super()这个函数,即便是单继承,也使用上面的方式
    查看全部
  • 大小写转换 1.capitalize()方法是实现首字母大写,其余字母小写的方法 2.upper()方法是将字母小写转大写 3.lower()方法是将字母大写转小写 map()函数不是改变原有的list,而是返回一个新的list。它是一个内置高阶函数
    查看全部
  • print p1._Person__count 可以在class外部访问类的私有属性
    查看全部

举报

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

微信扫码,参与3人拼团

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

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