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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • python进阶

    装饰器作用

    查看全部
  • python进阶

    装饰器

    查看全部
  • 没明白,什么叫延迟计算,感觉这样很麻烦

    查看全部
  • >>> getattr(s, 'name')  # 获取name属性
    'Bob'

    >>> setattr(s, 'name', 'Adam')  # 设置新的name属性

    >>> s.name
    'Adam'

    >>> getattr(s, 'age')  # 获取age属性,但是属性不存在,报错:
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'Student' object has no attribute 'age'

    >>> getattr(s, 'age', 20)  # 获取age属性,如果属性不存在,就返回默认值20:
    20

    查看全部
  • 任务

                   

    请给 Person 类添加一个类属性 count,每创建一个实例,count 属性就加 1,这样就可以统计出一共创建了多少个 Person 的实例。

                   

    • ?不会了怎么办

    • 由于创建实例必定会调用__init__()方法,所以在这里修改类属性 count 很合适。

      参考代码:

      class Person(object):
          count = 0
          def __init__(self, name):
              Person.count = Person.count + 1
              self.name = name
      p1 = Person('Bob')
      print Person.count# => 1p2 = Person('Alice')
      print Person.count# => 2p3 = Person('Tim')
      print Person.count# => 3


    查看全部
  • (1)*argv就是可变参数元组(tuple),可以表示任何多个无名参数,它的数据结构是:元组(tuple)。(2)**kwargv则是可变参数字典(dict),可以表示任意多个关键字参数,它的数据结构是:字典(dict)实例的初始属性中接受一个dict,用{key,values}表示

    **kw指的是key word,也就是关键字参数,类似于字典

    查看全部
  • 任务

                   

    请定义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


    查看全部
  • 任务

                   

    请创建包含两个 Person 类的实例的 list,并给两个实例的 name 赋值,然后按照 name 进行排序。

                   

    • ?不会了怎么办

    • sorted() 是高阶函数,接受一个比较函数。

      参考代码:

      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


    查看全部
  • 并没有对原始数据做出改变,只是在函数运行内部改变了大小写

    查看全部
  • 如何去掉`__xxx__`这类的特殊属性,只保留我们自己定义的属性?回顾一下filter()函数的用法。


    print filter(lambda x: x[0]!='_',dir(s))

    查看全部
  • 一定要用 super(Student, self).__init__(name, gender) 去初始化父类,

    查看全部
  • 类第一个函数不一定是def  __init__(self)

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

    2018-12-15

  • filter() 接收的函数必须判断出一个数的平方根是否是整数,而 math.sqrt()返回结果是浮点数。

    参考代码:

    import math
    def is_sqr(x):
        r = int(math.sqrt(x))
        return r*r==x
    print filter(is_sqr, range(1, 101))


    查看全部
  • 利用filter(),可以完成很多有用的功能,例如,删除 None 或者空字符串:

    def is_not_empty(s):
        return s and len(s.strip()) > 0
    filter(is_not_empty, ['test', None, '', 'str', '  ', 'END'])

    结果:['test', 'str', 'END']

    注意: s.strip(rm) 删除 s 字符串中开头、结尾处的 rm 序列的字符。


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

    查看全部

举报

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

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