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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
学习人数
综合评分9.20
575人评价 查看评价
9.6 内容实用
9.0 简洁易懂
9.0 逻辑清晰
  • 类方法与实例方法是两种不同的方法:类方法不需要实例化

    查看全部
  • 通过标记一个 @classmethod,该方法将绑定到 Person 类上,而非类的实例。类方法的第一个参数将传入类本身,通常将参数名命名为 cls,上面的 cls.count 实际上相当于 Person.count。

    因为是在类上调用,而非实例上调用,因此类方法无法获得任何实例变量,只能获得类的引用。


    查看全部
    • map()    
          map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,
    并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
    
    注意:
        map()函数不改变原有的 list,而是返回一个新的 list。
    利用map()函数,可以把一个 list 转换为另一个 list,只需
    要传入转换函数。
        由于list包含的元素可以是任何类型,因此,map() 不仅
    仅可以处理只包含数值的 list,事实上它可以处理包含任意类型的 list,只要传入的函数f可
    以处理这种数据类型。
    print(str.upper())          # 把所有字符中的小写字母转换成大写字母
    print(str.lower())          # 把所有字符中的大写字母转换成小写字母
    print(str.capitalize())     # 把第一个字母转化为大写字母,其余小写
    print(str.title())          # 把每个单词的第一个字母转化为大写,其余小写


    查看全部
  • 在实例方法内部,可以访问所有实例属性,这样,如果外部需要访问私有属性,可以通过方法调用获得,这种数据封装的形式除了能保护内部数据一致性外,还可以简化外部调用的难度。

    查看全部
  • 计算平方根用函数 math.sqrt()

    查看全部
  • 一个实例的私有属性就是以__开头的属性,无法被外部访问

    什么叫无法被外部访问

    查看全部
  • 高阶函数:能接收函数做参数的函数

       变量可以指向函数

       函数的参数可以接受变量

       一个函数可以接受另一个函数作为参数

      能接受函数做参数的函数就是高阶函数

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

    class Person(object):
        address = 'Earth'
        def __init__(self, name):
            self.name = name
    
    p1 = Person('Bob')
    p2 = Person('Alice')
    
    print 'Person.address = ' + Person.address
    
    p1.address = 'China'
    print 'p1.address = ' + p1.address
    
    print 'Person.address = ' + Person.address
    print 'p2.address = ' + p2.address

    结果如下:

    Person.address = Earth
    p1.address = China
    Person.address = Earth
    p2.address = Earth


    查看全部
  • 当实例属性和类属性重名时,实例属性优先级高

    查看全部
  • 请定义Person类的__init__方法,除了接受 name、gender 和 birth 外,还可接受任意关键字参数,并把他们都作为属性赋值给实例。

    • 要定义关键字参数,使用 **kw;

      除了可以直接使用self.name = 'xxx'设置一个属性外,还可以通过 setattr(self, 'name', 'xxx') 设置属性。

      参考代码:

      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


    查看全部
  • 要定义关键字参数,使用 **kw

    例子:

    请定义Person类的__init__方法,除了接受 name、gender 和 birth 外,还可接受任意关键字参数,并把他们都作为属性赋值给实例。

    除了可以直接使用self.name = 'xxx'设置一个属性外,还可以通过 setattr(self, 'name', 'xxx') 设置属性。

    参考代码:

    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


    查看全部
  • python中初始化实例属性

    在定义 Person 类时,可以为Person类添加一个特殊的__init__()方法,当创建实例时,__init__()方法被自动调用,我们就能在此为每个实例都统一加上以下属性:

    class Person(object):    def __init__(self, name, gender, birth):
            self.name = name
            self.gender = gender
            self.birth = birth

    __init__() 方法的第一个参数必须是 self(也可以用别的名字,但建议使用习惯用法),后续参数则可以自由指定,和定义函数没有任何区别。


    查看全部
  • 返回闭包不能引用循环变量,请改写count()函数,让它正确返回能计算1x1、2x2、3x3的函数。

    考察下面的函数 f:

    def f(j):
        def g():
            return j*j
        return g

    它可以正确地返回一个闭包g,g所引用的变量j不是循环变量,因此将正常执行。

    在count函数的循环内部,如果借助f函数,就可以避免引用循环变量i。

    参考代码:

    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中闭包

    2019-07-17

  • 接收任意关键字参数:

    def __init__(self,name,gender,birth,**kw):

    ............

        for k,v in kw.iteritems():

             setattr(self,k,v)  (setattr()函数用于设置新的属性,例:setattr(s,'name','Adam')   s.name-->Adam)

    查看全部
  • 在第7节中,我们在sorted这个高阶函数中传入自定义排序函数就可以实现忽略大小写排序。请用functools.partial把这个复杂调用变成一个简单的函数:

    sorted_ignore_case(iterable)
    • ?不会了怎么办

    • 要固定sorted()的cmp参数,需要传入一个排序函数作为cmp的默认值。

      参考代码:

      import functools
      sorted_ignore_case = functools.partial(sorted, cmp=lambda s1, s2: cmp(s1.upper(), s2.upper()))
      print sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit'])


    查看全部
    0 采集 收起 来源:python中偏函数

    2019-07-17

举报

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

微信扫码,参与3人拼团

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

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