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

python进阶

廖雪峰 移动开发工程师
难度中级
时长 3小时33分
学习人数
综合评分9.20
575人评价 查看评价
9.6 内容实用
9.0 简洁易懂
9.0 逻辑清晰
  • 任务

    如果没有定义set方法,就不能对“属性”赋值,这时,就可以创建一个只读“属性”。

    请给Student类加一个grade属性,根据 score 计算 A(>=80)、B、C(<60)。

    • ?不会了怎么办

    • 用 @property 修饰 grade 的 get 方法即可实现只读属性。

      参考代码:

      class Student(object):
          def __init__(self, name, score):
              self.name = name
              self.__score = score
          @property
          def score(self):
              return self.__score
          @score.setter
          def score(self, score):
              if score < 0 or score > 100:
                  raise ValueError('invalid score')
              self.__score = score
          @property
          def grade(self):
              if self.score < 60:
                  return 'C'
              if self.score < 80:
                  return 'B'
              return 'A'
      s = Student('Bob', 59)
      print s.grade
      s.score = 60
      print s.grade
      s.score = 99
      print s.grade


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

    2020-07-27

  • 任务

    请继续完善Rational,使之可以转型为float。

    • ?不会了怎么办

    • 将self.p转型为float类型,再作除法就可以得到float:

      float(self.p) / self.q

      参考代码:

      class Rational(object):
          def __init__(self, p, q):
              self.p = p
              self.q = q
      
          def __int__(self):
              return self.p // self.q
      
          def __float__(self):
              return float(self.p) / self.q
      
      print float(Rational(7, 2))
      print float(Rational(1, 3))


    查看全部
  • 任务

    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


    查看全部
  • Python内置的 sorted()函数可对list进行排序:

    >>>sorted([36, 5, 12, 9, 21])
    [5, 9, 12, 21, 36]

    但 sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。

    调用 sorted() 并传入 reversed_cmp 就可以实现倒序排序:

    >>> sorted([36, 5, 12, 9, 21], reversed_cmp)
    [36, 21, 12, 9, 5]

    sorted()也可以对字符串进行排序,字符串默认按照ASCII大小来比较:

    例如:

    >>> sorted(['bob', 'about', 'Zoo', 'Credit'])
    ['Credit', 'Zoo', 'about', 'bob']

    'Zoo'排在'about'之前是因为'Z'的ASCII码比'a'小。


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

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

    查看全部
  • print(str.upper())# 把所有字符中的小写字母转换成大写字母
    print(str.lower()) # 把所有字符中的大写字母转换成小写字母
    print(str.capitalize()) # 把第一个字母转化为大写字母,其余小写
    print(str.title())  # 把每个单词的第一个字母转化为大写,其余小写

    例如:s[0].upper()表示第一个字母大写

    s[1:].lower表示从第二位开始往后的元素大写字母转换为小写字母

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

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

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

    查看全部
  • 利用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 序列的字符。

    当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' '),如下:

    a = '     123'
    a.strip()

    结果: '123'

    a='\t\t123\r\n'
    a.strip()

    结果:'123'


    查看全部
  • reduce()函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值

    查看全部
  • import math


    def is_sqr(x):

        return len(str(math.sqrt(x)).split(".")[1]) == 1


    print filter(is_sqr, range(1, 101))


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

    1. 变量可以指向函数

    2. 函数的参数可以接受变量

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

    4. 能接收函数做参数的函数就是高阶函数


    查看全部
  • 一个py文件称为一个模块

    不同的文件夹称为包

    包中包含多个模块,以及__init__.py文件

    import from import as


    查看全部
  • 闭包和装饰器讲解:https://www.bilibili.com/video/BV1JW411i7HR?from=search&seid=11281653268329324661

    查看全部
  • 任务

    斐波那契数列是由 0, 1, 1, 2, 3, 5, 8...构成。

    请编写一个Fib类,Fib(10)表示数列的前10个元素,print Fib(10) 可以打印出数列的前 10 个元素,len(Fib(10))可以正确返回数列的个数10。

    • ?不会了怎么办

    • 需要根据num计算出斐波那契数列的前N个元素。

      参考代码:

      class Fib(object):
          def __init__(self, num):
              a, b, L = 0, 1, []
              for n in range(num):
                  L.append(a)
                  a, b = b, a + b
              self.numbers = L
      
          def __str__(self):
              return str(self.numbers)
      
          __repr__ = __str__
      
          def __len__(self):
              return len(self.numbers)
      
      f = Fib(10)
      print f
      print len(f)


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

    2020-07-24

  • 装饰器讲解:https://www.bilibili.com/video/BV11s411V7Dt?from=search&seid=4406434222455786909

    查看全部

举报

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

微信扫码,参与3人拼团

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

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