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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • 由于Python的动态特性,json.load()并不一定要从一个File对象读取内容。任何对象,只要有read()方法,就称为File-like Object,都可以传给json.load()。

    查看全部
    0 采集 收起 来源:python中多态

    2018-05-27

  • class Person(object):
        def __init__(self, name, gender, birth, **kw):
            self.name = name
            self.gender = gender
            self.birth = birth
            for k, v in kw.iteritems():
                setattr(self, k, v)
    xiaoming = Person('Xiao Ming', 'Male', '1990-1-1', job='Student')
    print xiaoming.name
    print xiaoming.job

    查看全部
  • class Person(object):
        pass

    p1 = Person()
    p1.name = 'Bart'

    p2 = Person()
    p2.name = 'Adam'

    p3 = Person()
    p3.name = 'Lisa'

    L1 = [p1, p2, p3]
    L2 = sorted(L1,lambda p1,p2:cmp(p1.name,p2.name)) #匿名函数

    print L2[0].name
    print L2[1].name
    print L2[2].name

    查看全部
  • 因为方法也是一个属性,所以,它也可以动态地添加到实例上,只是需要用 types.MethodType() 把一个函数变为一个方法:

    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()
    # => A
    p2 = Person('Alice', 65)
    print p2.get_grade()
    # ERROR: AttributeError: 'Person' object has no attribute 'get_grade'
    # 因为p2实例并没有绑定get_grade


    查看全部
  • 用了@property以后 为什么原来的方法不能用了

    原来的s.get_score 为什么不能正常使用了?



    首先要清楚,你的get_score 是一个实例方法, 所以调用实例方法应该 s.get_score() 

    想 s.get_score  调用方法的话, 可以用property 装饰器,进行装饰,就可以用了.


    @property
    def get_score(self):
        return self.__score

    这也是 ,属性和方法的区别, 属性 直接 s.score   调用,  而方法需要 s.get_score() 来进行调用哦,


    查看全部
    0 采集 收起 来源:python中 @property

    2018-05-26

  • 当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。

    不要在实例上修改类属性,它实际上并没有修改类属性,而是给实例绑定了一个实例属性。

    查看全部
  • 类型转换:

        除法:

            1. 地板除法:用//表示,不管操作数为何种数值类型,总是会舍去小数部分,返回数字序列中比真正的商小的最接近的数字。比如 1//2 = 0, 1.0//2= 0。

    2. 传统除法:用/表示,对整数之间的/,执行地板除,但对有浮点数参与的除法则执行传统意义上的除法。比如 1/2 = 0, 1.0/2=0.5。

    3. 精确除法:如果你想让上面的传统除法,更"传统",你就应该调用 from __future__ import division,这样以后/就真的变成传统意义上的传统除法了。比如,1/2=0.5, 1.0/2=0.5。

    4. 注意以上讲的是针对Python 2.6+版本的,对于Python 3+,传统除法被废除了,也就是说只有地板除和精确除法,分别用//和/表示,且不用调用 from __future__ import division。

    查看全部
  • filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

    查看全部
  • reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算:

    reduce(f, [1, 3, 5, 7, 9], 100)

    结果将变为125,因为第一轮计算是:

    计算初始值和第一个元素:f(100, 1),结果为101


    查看全部
  • import time

    def performance(f):
        def fn(*arg,**kw):
            t1=time.time()
            r=f(*arg,**kw)
            t2=time.time()
            print 'call %s() in %fs' % (f.__name__,(t2-t1))
            return r
        return fn

    @performance
    def factorial(n):
        return reduce(lambda x,y: x*y, range(1, n+1))

    print factorial(10)

    查看全部
  • x if condition else y 是一个 python 的专门语法

    查看全部
  • 既然父类中有__slots__要求,那就直接在子类中重新定义__slots__呗,添加上score参数就行了

    查看全部
    0 采集 收起 来源:python中 __slots__

    2018-05-25

  • 装饰器函数把 get/set 方法“装饰”成属性调用



    还是不太理解装饰器的真正含义

    查看全部
    0 采集 收起 来源:python中 @property

    2018-05-25

  • def count():
        fs = []
        for i in range(1,4):
            def f(j):
                def g():
                    return j*j
                return g
            r=f(i)
            fs.append(r)
        return fs
            
    f1, f2, f3 = count()
    print f1(), f2(), f3()
    查看全部
    0 采集 收起 来源:python中闭包

    2018-05-25

  • 像这种内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。


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

    2018-05-25

举报

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

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