亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

python進階

廖雪峰 移動開發工程師
難度中級
時長 3小時33分
學習人數
綜合評分9.20
575人評價 查看評價
9.6 內容實用
9.0 簡潔易懂
9.0 邏輯清晰
  • 正常內置的排序函數:x<y返回-1

    因此,要實現倒序排列的話,得定義一個函數使得:x>y返回-1

    查看全部
  • reduce()傳入的函數 f 必須接收兩個參數,reduce()對list的每個元素反復調用函數f

    查看全部
  • 任務

    請修改?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__

    2020-07-24

  • 任務

    請給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


    查看全部
  • 任務

    對于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


    查看全部
  • 任務

    +-Person
    ? +- Student
    ? +- Teacher

    是一類繼承樹;

    +- SkillMixin
    ? ?+- BasketballMixin
    ? ?+- FootballMixin

    是一類繼承樹。

    通過多重繼承,請定義“會打籃球的學生”和“會踢足球的老師”。

    • ?不會了怎么辦

    • 多重繼承需要從兩個或更多的類派生。

      參考代碼:

      class?Person(object):
      ????pass
      
      class?Student(Person):
      ????pass
      
      class?Teacher(Person):
      ????pass
      
      class?SkillMixin(object):
      ????pass
      
      class?BasketballMixin(SkillMixin):
      ????def?skill(self):
      ????????return?'basketball'
      
      class?FootballMixin(SkillMixin):
      ????def?skill(self):
      ????????return?'football'
      
      class?BStudent(Student,?BasketballMixin):
      ????pass
      
      class?FTeacher(Teacher,?FootballMixin):
      ????pass
      
      s?=?BStudent()
      print?s.skill()
      
      t?=?FTeacher()
      print?t.skill()


    查看全部
  • 任務

    Python提供了open()函數來打開一個磁盤文件,并返回?File?對象。File對象有一個read()方法可以讀取文件內容:

    例如,從文件讀取內容并解析為JSON結果:

    import?json
    f?=?open('/path/to/file.json',?'r')
    print?json.load(f)

    由于Python的動態特性,json.load()并不一定要從一個File對象讀取內容。任何對象,只要有read()方法,就稱為File-like Object,都可以傳給json.load()。

    請嘗試編寫一個File-like Object,把一個字符串?r'["Tim", "Bob", "Alice"]'包裝成?File-like Object?并由?json.load()?解析。

    • ?不會了怎么辦

    • 只要為Students類加上?read()方法,就變成了一個File-like Object。

      參考代碼:

      import?json
      
      class?Students(object):
      ????def?read(self):
      ????????return?r'["Tim",?"Bob",?"Alice"]'
      
      s?=?Students()
      
      print?json.load(s)


    查看全部
    0 采集 收起 來源:python中多態

    2020-07-24

  • 任務

    請根據繼承鏈的類型轉換,依次思考?t?是否是?Person,Student,Teacher,object?類型,并使用isinstance()判斷來驗證您的答案。

    • ?不會了怎么辦

    • 注意t?是Teacher的實例,繼承鏈是:

      object <- Person <- Teacher

      參考代碼:

      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
      
      class?Teacher(Person):
      ????def?__init__(self,?name,?gender,?course):
      ????????super(Teacher,?self).__init__(name,?gender)
      ????????self.course?=?course
      
      t?=?Teacher('Alice',?'Female',?'English')
      
      print?isinstance(t,?Person)
      print?isinstance(t,?Student)
      print?isinstance(t,?Teacher)
      print?isinstance(t,?object)


    查看全部
  • 任務

    請參考?Student?類,編寫一個?Teacher類,也繼承自?Person。

    • ?不會了怎么辦

    • 要正確調用?super()?的__init__方法。

      參考代碼:

      class?Person(object):
      ????def?__init__(self,?name,?gender):
      ????????self.name?=?name
      ????????self.gender?=?gender
      class?Teacher(Person):
      ????def?__init__(self,?name,?gender,?course):
      ????????super(Teacher,?self).__init__(name,?gender)
      ????????self.course?=?course
      
      t?=?Teacher('Alice',?'Female',?'English')
      print?t.name
      print?t.course


    查看全部
  • 任務

    如果將類屬性?count?改為私有屬性__count,則外部無法讀取__score,但可以通過一個類方法獲取,請編寫類方法獲得__count值。

    ?

    • ?不會了怎么辦

    • 注意類方法需要添加?@classmethod

      參考代碼:

      class?Person(object):
      ????__count?=?0????@classmethod
      ????def?how_many(cls):
      ????????return?cls.__count
      ????def?__init__(self,?name):
      ????????self.name?=?name
      ????????Person.__count?=?Person.__count?+?1
      
      print?Person.how_many()
      p1?=?Person('Bob')
      print?Person.how_many()


    查看全部
  • 高階函數定義:變量名可以指向函數,因此函數可以通過一個變量傳給另一個函數,因此這個函數就可以看作高階函數。

    查看全部
  • 任務

    由于屬性可以是普通的值對象,如?str,int?等,也可以是方法,還可以是函數,大家看看下面代碼的運行結果,請想一想?p1.get_grade?為什么是函數而不是方法:

    class?Person(object):
    ????def?__init__(self,?name,?score):
    ????????self.name?=?name
    ????????self.score?=?score
    ????????self.get_grade?=?lambda:?'A'
    
    p1?=?Person('Bob',?90)
    print?p1.get_grade
    print?p1.get_grade()
    • ?不會了怎么辦

    • 直接把?lambda?函數賦值給?self.get_grade?和綁定方法有所不同,函數調用不需要傳入?self,但是方法調用需要傳入?self。


    查看全部
  • 任務

    請給?Person?類增加一個私有屬性?__score,表示分數,再增加一個實例方法?get_grade(),能根據?__score?的值分別返回?A-優秀, B-及格, C-不及格三檔。

    ?

    • ?不會了怎么辦

    • 注意get_grade()是實例方法,第一個參數為self。

      參考代碼:

      class?Person(object):
      
      ????def?__init__(self,?name,?score):
      ????????self.__name?=?name
      ????????self.__score?=?score
      
      ????def?get_grade(self):
      ????????if?self.__score?>=?80:
      ????????????return?'A'
      ????????if?self.__score?>=?60:
      ????????????return?'B'
      ????????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()


    查看全部
  • 任務

    請把上節的?Person?類屬性?count?改為?__count,再試試能否從實例和類訪問該屬性。

    ?

    • ?不會了怎么辦

    • 把count改為私有__count,這樣實例變量在外部無法修改__count

      參考代碼:

      class?Person(object):
      ????__count?=?0
      ????def?__init__(self,?name):
      ????????Person.__count?=?Person.__count?+?1
      ????????self.name?=?name
      ????????print?Person.__count
      
      p1?=?Person('Bob')
      p2?=?Person('Alice')
      
      print?Person.__count


    查看全部
  • 任務

    請給?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


    查看全部

舉報

0/150
提交
取消
課程須知
本課程是Python入門的后續課程 1、掌握Python編程的基礎知識 2、掌握Python函數的編寫 3、對面向對象編程有所了解更佳
老師告訴你能學到什么?
1、什么是函數式編程 2、Python的函數式編程特點 3、Python的模塊 4、Python面向對象編程 5、Python強大的定制類

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!