https://johnny-notes.medium.com/python-%E4%B8%AD%E7%9A%84%E8%AE%8A%E6%95%B8%E8%88%87%E8%B3%87%E6%96%99%E9%A1%9E%E5%9E%8B-3f15a38b8638