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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
学习人数
综合评分9.20
575人评价 查看评价
9.6 内容实用
9.0 简洁易懂
9.0 逻辑清晰
  • 因为Python提供的基本库builtinls.py中的object类定义好的函数,所有的类默认继承object类

    查看全部
  • map(f, list)

    reduce(f, list)

    filter(f, list)

    查看全部
  • python中reduce()函数

    reduce()函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 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。


    查看全部
  • 有毒啊,没说初始化实例不能有返回值

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

    查看全部
  • 实例的方法就是在类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身

    查看全部
  • reduce()函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 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。


    查看全部
  • map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回

    注意:map()函数不改变原有的 list,而是返回一个新的 list。

    利用map()函数,可以把一个 list 转换为另一个 list,只需要传入转换函数。


    查看全部
  •  f 可以被调用,所以,f 被称为可调用对象。

    所有的函数都是可调用对象。

    一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。

    我们把 Person 类变成一个可调用对象:

    class Person(object):
        def __init__(self, name, gender):
            self.name = name
            self.gender = gender
    
        def __call__(self, friend):
            print 'My name is %s...' % self.name
            print 'My friend is %s...' % friend

    现在可以对 Person 实例直接调用:

    >>> p = Person('Bob', 'male')
    >>> p('Tim')
    My name is Bob...
    My friend is Tim...

    单看 p('Tim') 你无法确定 p 是一个函数还是一个类实例,所以,在Python中,函数也是对象,对象和函数的区别并不显著


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

    2020-03-18

  • 等你等你到家
    查看全部
  • __slots__是指一个类允许的属性列表
    # __slots__的目的是限制当前类所能拥有的属性,如果不需要添加任意动态的属性,使用__slots__也能节省内存
    '''假设Person类通过__slots__定义了name和gender,
    请在派生类Student中通过__slots__继续添加score的定义,
    使Student类可以实现name、gender和score 3个属性。'''
    
    class Person(object):
        __slots__ = ('name', 'gender')
        def __init__(self, name, gender):
            self.name = name
            self.gender = gender
    class Student(Person):
        __slots__ = ('score',) # Student类的__slots__只需要包含Person类不包含的score属性即可
        def __init__(self, name, gender, score):
            super(Student, self).__init__(name, gender)
            self.score = score
    
    s = Student('lihong', 'male', 60)
    print(s.name, s.gender, s.score)


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

    2020-03-18

  • class Student(object):
        def __init__(self, name, score):
            self.name = name
            self.__score = score
        @property # 用装饰器函数把get/set方法“装饰”成属性调用
        def score(self): # get方法,用@property装饰
            return self.__score
        @score.setter # @score.setter是前一个@property装饰后的副产品
        def score(self, score): # set方法,用@score.setter装饰
            if score < 0 or score > 100:
                raise ValueError('invalid score')
            self.__score = score
        @property # 用@property修饰grade的get方法即可实现只读属性
        def grade(self):
            if self.score >= 80:
                return 'A'
            elif self.score >= 60:
                return 'B'
            else:
                return 'C'
    
    s = Student('xiaohong', 60)
    s.score = 100 # 说明对score赋值实际调用的是 set方法
    print(s.name)
    print(s.score)
    print(s.grade)


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

    2020-03-18

  • 用def是在类里边定义类的方法,而用def__init__是在类里边定义类的属性。

    用def定义的类方法用实例名.方法名(x)的形式调用,而用def__init定义的类属性用实例名.属性名=x调用。

    如果我想用调用类属性的形式调用类方法呢?那就加个@property就可以了。实际上@property就是把类方法变成了一个类属性。


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

    2020-03-18

  • json.load 把字符串转换成字典

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

    2020-03-17

  • Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问。

    如果一个属性以"__xxx__"的形式定义,那它又可以被外部访问了,以"__xxx__"定义的属性在Python的类中被称为特殊属性,有很多预定义的特殊属性可以使用,通常我们不要把普通属性用"__xxx__"定义。

    查看全部

举报

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

微信扫码,参与3人拼团

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

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