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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
  • def cmp_ignore_case(s1, s2):

        if s1.lower() < s2.lower():

            return -1

        if s1.lower > s2.lower:

            return 1

        return 0


    print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)


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

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


    查看全部
  • 任务

    Rational类虽然可以做加法,但无法做减法、乘方和除法,请继续完善Rational类,实现四则运算。

    提示:
    减法运算:__sub__
    乘法运算:__mul__
    除法运算:__div__

    • ?不会了怎么办

    • 如果运算结果是 6/8,在显示的时候需要归约到最简形式3/4。

      参考代码:

      def gcd(a, b):
          if b == 0:
              return a
          return gcd(b, a % b)
      
      class Rational(object):
          def __init__(self, p, q):
              self.p = p
              self.q = q
          def __add__(self, r):
              return Rational(self.p * r.q + self.q * r.p, self.q * r.q)
          def __sub__(self, r):
              return Rational(self.p * r.q - self.q * r.p, self.q * r.q)
          def __mul__(self, r):
              return Rational(self.p * r.p, self.q * r.q)
          def __div__(self, r):
              return Rational(self.p * r.q, self.q * r.p)
          def __str__(self):
              g = gcd(self.p, self.q)
              return '%s/%s' % (self.p / g, self.q / g)
          __repr__ = __str__
      
      r1 = Rational(1, 2)
      r2 = Rational(1, 4)
      print r1 + r2
      print r1 - r2
      print r1 * r2
      print r1 / r2


    查看全部
  • 如果一个类表现得像一个list,要获取有多少个元素,就得用 len() 函数。

    要让 len() 函数工作正常,类必须提供一个特殊方法__len__(),它返回元素的个数。

    例如,我们写一个 Students 类,把名字传进去:

    class Students(object):
        def __init__(self, *args):
            self.names = args
        def __len__(self):
            return len(self.names)

    只要正确实现了__len__()方法,就可以用len()函数返回Students实例的“长度”:

    >>> ss = Students('Bob', 'Alice', 'Tim')
    >>> print len(ss)
    3


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

    2018-04-12

  • 对 intstr 等内置数据类型排序时,Python的 sorted() 按照默认的比较函数 cmp 排序,但是,如果对一组 Student 类的实例排序时,就必须提供我们自己的特殊方法 __cmp__()

    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.name < s.name:
                return -1
            elif self.name > s.name:
                return 1
            else:
                return 0

    上述 Student 类实现了__cmp__()方法,__cmp__用实例自身self和传入的实例 进行比较,如果 self 应该排在前面,就返回 -1,如果 s 应该排在前面,就返回1,如果两者相当,返回 0。

    Student类实现了按name进行排序:

    >>> L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 77)]
    >>> print sorted(L)
    [(Alice: 77), (Bob: 88), (Tim: 99)]


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

    2018-04-12

  • python中 __str__和__repr__

    如果要把一个类的实例变成 str,就需要实现特殊方法__str__()

    class Person(object):     def __init__(self, name, gender):         self.name = name         self.gender = gender     def __str__(self):         return '(Person: %s, %s)' % (self.name, self.gender)

    现在,在交互式命令行下用 print 试试:

    >>> p = Person('Bob', 'male') >>> print p (Person: Bob, male)

    但是,如果直接敲变量 p

    >>> p <main.Person object at 0x10c941890>

    似乎__str__() 不会被调用。

    因为 Python 定义了__str__()__repr__()两种方法,__str__()用于显示给用户,而__repr__()用于显示给开发人员。

    有一个偷懒的定义__repr__的方法:

    class Person(object):     def __init__(self, name, gender):         self.name = name         self.gender = gender     def __str__(self):         return '(Person: %s, %s)' % (self.name, self.gender)     __repr__ = __str__


    查看全部
  • 当新版本的一个特性与旧版本不兼容时,该特性将会在旧版本中添加到__future__中,以便旧的代码能在旧版本中测试新特性。

    查看全部
  • Python中的高阶函数

    1:变量可以指向函数,直接对变量进行调用和直接调用函数的效果是一样的。

    2:函数名是一个指向函数对象的变量。

    3:由于函数的参数是一个变量,而变量又可以指向函数,所以一个可以接收函数作为参数的函数叫做高阶函数。

    查看全部
  • Python中的函数式编程

    1:函数 function; 函数式 functional.

    2:把计算视为函数,而不是指令。

    3:纯函数式编程,不需要变量,没有副作用,运行多少回结果都一样,测试简单

    4:支持高阶函数,代码简洁。

    5:Python不是纯函数式编程,允许有变量

    6:Python支持高阶函数,函数可以作为变量传入

    7:Python支持闭包,返回值可以是一个函数

    8:Python有限度的支持匿名函数

    查看全部
  • python 中的类型转换

    Python有int float等数据类型,如果要实现转换直接使用内置的方法即可

    但是如果被转换的为无理数就需要对原有的内置函数进行重写

    python2中  //表示整除   /表示除得到的是浮点数结果

    查看全部
  • Python2

    return '(Student: %s, %s, %d)'%(self.name,self.gender,self.score)

    Python3

    return '(Student: {},{},{})'.format(self.name, self.gender, self.score)

    Python2还要查类型。。用Python的人,怎么能查类型呢!? 摔

    查看全部
  • Python中__len__

    如果一个类表现得像一个list要获取有多少个元素,就得用len()函数;要返回类中对应的个数,类就必须要提供一个特殊的方法__len__(),他返回元素的个数;

    例如:

    class Student(object):

        def __init__(self,*args):

            self.name=args

        def __len__(self):    #对len()函数的__len__()方法进行重写

            return len(self.name)   #返回时掉用len方法本身


    注:只要正确实现了__len__()方法,就可以调用len()函数返回Students的实例的“长度”

    ss=Students('xiao hong','xiao hua','xiao ming')

    print len(ss)

    #此时会得到实例的“长度”

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

    2018-04-12

  • Python中的__slots__

    1:子类的__slots__中只需要添加子类特有的属性就可以。

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

    2018-04-12

  • 安装模块

    查看全部
  • @property
        def score(self):#1.这里的score如果变成Score
            return self.__score

        @score.setter#2.那么这里也要变成Score
        def score(self, score):#3.def score这个和上面的两个无关,变成Score后影响赋值
            if score < 0 or score > 100:
                raise ValueError('invalid score')
            self.__score = score

    #1变成Score后

    print s.Score

    #3.变成Score后

    s.Score = 12



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

    2018-04-12

举报

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

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