美文网首页
基础·常量

基础·常量

作者: 三米板 | 来源:发表于2020-03-14 18:52 被阅读0次

    Python基础教程

    一、常量

    变量是变化的量,常量则是不变的量。python中没有使用语法强制定义常量,也就是说,python中定义常量本质上就是变量。
    如果是常量,那就没必要更改,所以python就只制定了一个规范,而没指定常量的语法,因此常量也是可以修改的,但不建议。

    二、内置常量

    内置常量
    有少数的常量存在于内置命名空间中。 它们是:
    False
    bool 类型的假值。 给 False 赋值是非法的并会引发 SyntaxError。
    True
    bool 类型的真值。 给 True 赋值是非法的并会引发 SyntaxError。
    None
    NoneType 类型的唯一值。 None 经常用于表示缺少值,当因为默认参数未传递给函数时。 给 None 赋值是非法的并会引发 SyntaxError。
    NotImplemented
    二进制特殊方法应返回的特殊值(例如,eq()、lt()、__add __()、rsub() 等)表示操作没有针对其他类型实现;为了相同的目的,可以通过就地二进制特殊方法
    Ellipsis
    与省略号文字字面 “...” 相同。 特殊值主要与用户定义的容器数据类型的扩展切片语法结合使用。

    三、用模块和类实现真正的常量

    const.py

    class _const:
        class ConstError(TypeError) : pass
    
        def __setattr__(self, key, value):
           # self.__dict__
            if key in self.__dict__:
                data="Can't rebind const (%s)" % key
                raise self.ConstError(data)
            self.__dict__[key] = value
    
    import sys
    
    sys.modules[__name__] = _const()
    

    test.py

    import const
    const.c=1
    print(const.c)  # 1
    const.c=2   #const.ConstError: Can't rebind const (c)
    

    sys.modules[key] =value : 返回系统导入的模块字段,key是模块名,value是模块

    Python中所有加载到 内存的模块都放在sys.modules。sys.modules是一个全局字典,字典sys.modules对于加载模块起到了缓冲的作用,当import一个模块时首先会在这个列表中查找是否已经加载了此模块,如果加载了则只是将模块的名字加入到正在调用import的模块的Local名字空间中。当第二次再导入该模块时,python会直接到字典中查找,从而加快了程序运行的速度。件,模块文件可以是py、pyc、pyd,找到后将模块载入内存,并加入到sys.modules中,并将名称导入到当前的Local名字空间。

    相关文章

      网友评论

          本文标题:基础·常量

          本文链接:https://www.haomeiwen.com/subject/mkngshtx.html