正在卓尼小乱 发表于 2020-7-8 16:27:28

小甲鱼python作业第50讲:模块

# 该模块用于让 Python 支持常量操作
class Const:   
    def __setattr__(self, name, value):
      if name in self.__dict__:
            raise TypeError('常量无法改变!')
            
      if not name.isupper():
            raise TypeError('常量名必须由大写字母组成!')

      self.__dict__ = value

import sys
sys.modules = Const()


上面一段最后的
import sys
sys.modules=Const()
是什么意思,网上搜集的比较零散,__name__、sys.modules什么的拆开我懂,这些合在一起我不大懂
原题https://fishc.com.cn/forum.php?mod=viewthread&tid=60578&extra=page%3D2%26filter%3Dtypeid%26typeid%3D398
动动手唯一一题

Twilight6 发表于 2020-7-8 16:36:48



import sys就是导入 sys 模块

sys.modules=Const()

__name__ 属性当你是主程序运行时候 返回的是 '__main__' ,就表示这个代码自己

所以这里实际上就是 sys.modules['__main__'] ,而我们知道 sys.modules 就是一个全局字典,Python中所有加载到内存的模块都放在sys.modules

所以你这里就是把 Const() 这个方法加入到这个全局字典中,这个字典是python启动后就加载在内存中。

每当你导入新的模块,sys.modules 全局字典都将记录这些模块。

字典 sys.modules 对于加载模块起到了缓冲的作用。当某个模块第一次导入,字典sys.modules将自动记录该模块。

当第二次再导入该模块时,python会直接到字典中查找,从而加快了程序运行的速度。

主要的作用就是最后一句话,你也可以不这样 直接导入在这里完全没毛病~,效率问题,而对我们来说这一个小测试代码谈不上效率


正在卓尼小乱 发表于 2020-7-8 16:59:35

Twilight6 发表于 2020-7-8 16:36
import sys就是导入 sys 模块

sys.modules=Const()


多谢,你讲的非常清楚!

Twilight6 发表于 2020-7-8 17:00:04

正在卓尼小乱 发表于 2020-7-8 16:59
多谢,你讲的非常清楚!

客气
页: [1]
查看完整版本: 小甲鱼python作业第50讲:模块