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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • 直接sqrt不对sqrt不会应该是math.sqrt
    查看全部
  • 不知道math.sqrt()数据类型,还是用的少,多练习噢。
    查看全部
  • 很有趣,使用decorator的顺序与预期的不太一样,先走define fn,再走return fn,然后才会开始调用fn内部的代码,如果在define fn阶段尝试打印fn.__name__,则报错使用了无实体的函数,说明此时fn函数并未生成,在return后才完成了整个的函数define。 在执行阶段,fn的名称指向的仍然是自定义函数fn,而f已经变成了输入函数变量factorial,说明装饰器在对函数进行装饰时,并不会修改函数名称指向的实际内容,而是创建了一个新函数,并使用*args和**kw传入了预期调用函数的输入参量。相当于创建了一个与被装饰函数入参相同的外壳函数,在被装饰函数的调用前后增加语句,才能起到所谓的装饰作用。可以想象,在外壳函数中如果并不调用f(*args, **kw)的话,fn其实与被装饰函数就不存在逻辑关系。而如果直接在外壳函数的return语句中完成f函数的调用的话,那么将无法进行后装饰,完成比如获取f函数结束时间之类的操作。 在执行r=f(*args, **kw)时,实际对factorial函数进行了调用,r得到的是该函数的返回值,而不是指向新函数。因为发生了实际的函数调用,所以t_pre和t_post的计算分别应该放在r=f****的调用语句前后,才能测算函数计算耗时
    查看全部
  • class Person(object): def __init__(self, name, score): self.__name=name self.__score=score def get_grade(self): if self.__score>=90:return "A" elif self.__score>=60:return "B" else:return "C" p1 = Person('Bob', 90) p2 = Person('Alice', 65) p3 = Person('Tim', 48) print p1.get_grade() print p2.get_grade() print p3.get_grade()
    查看全部
  • 一定要用 super(Student, self).__init__(name, gender) 去初始化父类,否则,继承自 Person 的 Student 将没有 name 和 gender。 函数super(Student, self)将返回当前类继承的父类,即 Person ,然后调用__init__()方法,注意self参数已在super()中传入,在__init__()中将隐式传递,不需要写出(也不能写)。
    查看全部
  • 请修改 Student 的 __cmp__ 方法,让它按照分数从高到底排序,分数相同的按名字排序。 ?不会了怎么办 需要先比较 score,在 score 相等的情况下,再比较 name。 参考代码: class Student(object): def __init__(self, name, score): self.name = name self.score = score def __str__(self): return '(%s: %s)' % (self.name, self.score) __repr__ = __str__ def __cmp__(self, s): if self.score == s.score: return cmp(self.name, s.name) return -cmp(self.score, s.score) L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 99)] print sorted(L)
    查看全部
    0 采集 收起 来源:python中 __cmp__

    2015-11-01

  • 请给Student 类定义__str__和__repr__方法,使得能打印出<Student: name, gender, score>: class Student(Person): def __init__(self, name, gender, score): super(Student, self).__init__(name, gender) self.score = score ?不会了怎么办 只要为Students 类加上__str__()和__repr__()方法即可。 参考代码: class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender class Student(Person): def __init__(self, name, gender, score): super(Student, self).__init__(name, gender) self.score = score def __str__(self): return '(Student: %s, %s, %s)' % (self.name, self.gender, self.score) __repr__ = __str__ s = Student('Bob', 'male', 88) print s
    查看全部
  • 正确的实现特殊方法
    查看全部
  • Python的部分特殊方法
    查看全部
  • Python的特殊方法的特点
    查看全部
  • Python的特殊方法
    查看全部
  • 对于Person类的定义: class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender 希望除了 name和gender 外,可以提供任意额外的关键字参数,并绑定到实例,请修改 Person 的 __init__()定 义,完成该功能。 传入**kw 即可传入任意数量的参数,并通过 setattr() 绑定属性。 参考代码: class Person(object): def __init__(self, name, gender, **kw): self.name = name self.gender = gender for k, v in kw.iteritems(): setattr(self, k, v) p = Person('Bob', 'Male', age=18, course='Python') print p.age print p.course
    查看全部
  • 像这样,D 同时继承自 B 和 C,也就是 D 拥有了 A、B、C 的全部功能。多重继承通过 super()调用__init__()方法时,A 虽然被继承了两次,但__init__()只调用一次: >>> d = D('d') init A... init C... init B... init D...
    查看全部
  • 这种行为称为多态。也就是说,方法调用将作用在 x 的实际类型上。s 是Student类型,它实际上拥有自己的 whoAmI()方法以及从 Person继承的 whoAmI方法,但调用 s.whoAmI()总是先查找它自身的定义,如果没有定义,则顺着继承链向上查找,直到在某个父类中找到为止。 由于Python是动态语言,所以,传递给函数 who_am_i(x)的参数 x 不一定是 Person 或 Person 的子类型。任何数据类型的实例都可以,只要它有一个whoAmI()的方法即可: class Book(object): def whoAmI(self): return 'I am a book' 这是动态语言和静态语言(例如Java)最大的差别之一。动态语言调用实例方法,不检查类型,只要方法存在,参数正确,就可以调用。
    查看全部
    0 采集 收起 来源:python中多态

    2015-11-01

  • 如果已经定义了Person类,需要定义新的Student和Teacher类时,可以直接从Person类继承: class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender 定义Student类时,只需要把额外的属性加上,例如score: class Student(Person): def __init__(self, name, gender, score): super(Student, self).__init__(name, gender) self.score = score 一定要用 super(Student, self).__init__(name, gender) 去初始化父类,否则,继承自 Person 的 Student 将没有 name 和 gender。 函数super(Student, self)将返回当前类继承的父类,即 Person ,然后调用__init__()方法,注意self参数已在super()中传入,在__init__()中将隐式传递,不需要写出(也不能写)。
    查看全部

举报

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

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