天天看點

Effective Python Ver2.0_StudyNotes_使用類體系去解決多層嵌套問題

要點:

不要在字典裡嵌套字典、長元組,以及用其他内置類型構造的複雜結構

namedtuple能夠實作出輕量級的容器,以存放不可變的資料,而且将來可以靈活地轉化為普通的類

如果發現用字典來維護内部狀态的那些代碼已經越來越複雜了,那麼就應該考慮改用多個類來實作

直接上代碼

from collections import namedtuple, defaultdict
Grade = namedtuple('Grade', ('score', 'weight'))

class Subject:
    def __init__(self):
        self._grades = []

    def report_grade(self, score, weight):
        self._grades.append(Grade(score, weight))

    def average_grade(self):
        total, total_weight = 0, 0
        for grade in self._grades:
            total += grade.score * grade.weight
            total_weight += grade.weight
        return total / total_weight

class Student:
    def __init__(self):
        self._subjects = defaultdict(Subject)

    def get_subject(self, name):
        return self._subjects[name]

    def average_grade(self):
        total, count = 0, 0
        for subject in self._subjects.values():
            total += subject.average_grade()
            count += 1
        return total / count

class Gradebook:
    def __init__(self):
        self._students = defaultdict(Student)

    def get_student(self, name):
        return self._students[name]


if __name__ == '__main__':
    book = Gradebook()
    albert = book.get_student('Albert Einstein')
    math = albert.get_subject('Math')
    math.report_grade(75, 0.05)
    math.report_grade(65, 0.15)
    math.report_grade(70, 0.80)
    gym = albert.get_subject('Gym')
    gym.report_grade(100, 0.40)
    gym.report_grade(85, 0.60)
    print(albert.average_grade())
           
請相信自己

當我們迷茫,懶惰,退縮的時候

我們會格外的相信命運

相信一切都是命中注定

而當我們努力拼搏,積極向上時

我們會格外的相信自己

是以命運是什麼呢?

它是如果你習慣它

那它就會一直左右你

如果你想掙脫它

那它就成為你的阻礙

可如果你打破了它

那它就是你人生的墊腳石!

如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,部落客在此感謝!