• python常量 (最全常量解析)


    常量

    一、常量

    变量是变化的量,常量则是不变的量。python中没有使用语法强制定义常量,也就是说,python中定义常量本质上就是变量。如果非要定义常量,变量名必须全大写。

    AGE_OF_NICK = 19
    print(AGE_OF_NICK)
    19
    AGE_OF_NICK = AGE_OF_NICK + 1
    print(AGE_OF_NICK)
    20
    

    如果是常量,那就没必要更改,所以python就只制定了一个规范,而没指定常量的语法,因此常量也是可以修改的,但不建议。

    在c语言中有专门的常量定义语法,const int age = 19;,一旦定义age为常量,更改age即会报错 。

    二、内置常量

    内置常量
    有少数的常量存在于内置命名空间中。 它们是:
    
    False
    bool 类型的假值。 给 False 赋值是非法的并会引发 SyntaxError。
    
    True
    bool 类型的真值。 给 True 赋值是非法的并会引发 SyntaxError。
    
    None
    NoneType 类型的唯一值。 None 经常用于表示缺少值,当因为默认参数未传递给函数时。 给 None 赋值是非法的并会引发 SyntaxError。
    
    NotImplemented
    二进制特殊方法应返回的特殊值(例如,__eq__()、__lt__()、__add __()、__rsub__() 等)表示操作没有针对其他类型实现;为了相同的目的,可以通过就地二进制特殊方法(例如,__imul __()、__ rightnd__() 等)返回。 它的逻辑值为真。
    
    注解 当二进制(或就地)方法返回``NotImplemented``时,解释器将尝试对另一种类型(或其他一些回滚操作,取决于运算符)的反射操作。 如果所有尝试都返回``NotImplemented``,则解释器将引发适当的异常。 错误返回的``NotImplemented``将导致误导性错误消息或返回到Python代码中的``NotImplemented``值。
    参见 实现算数运算 为例。
    
    注解 NotImplementedError 和 NotImplemented 不可互换,即使它们有相似的名称和用途。 有关何时使用它的详细信息,请参阅 NotImplementedError。
    Ellipsis
    与省略号文字字面 “...” 相同。 特殊值主要与用户定义的容器数据类型的扩展切片语法结合使用。
    
    __debug__
    如果 Python 没有以 -O 选项启动,则此常量为真值。 另请参见 assert 语句。
    
    注解 变量名 None,False,True 和 __ debug__ 无法重新赋值(赋值给它们,即使是属性名,将引发 SyntaxError ),所以它们可以被认为是“真正的”常数。
    由 site 模块添加的常量
    site 模块(在启动期间自动导入,除非给出 -S 命令行选项)将几个常量添加到内置命名空间。 它们对交互式解释器 shell 很有用,并且不应在程序中使用。
    
    quit(code=None)
    exit(code=None)
    当打印此对象时,会打印出一条消息,例如“Use quit() or Ctrl-D (i.e. EOF) to exit”,当调用此对象时,将使用指定的退出代码来引发 SystemExit。
    
    copyright
    credits
    打印或调用的对象分别打印版权或作者的文本。
    
    license
    当打印此对象时,会打印出一条消息“Type license() to see the full license text”,当调用此对象时,将以分页形式显示完整的许可证文本(每次显示一屏)。
    

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

    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名字空间。

  • 相关阅读:
    JavaScript Design Patterns: Mediator
    Javascript模块化编程系列一: 模块化的驱动
    【329】word 替换文本高级用法
    【327】Python 中 PIL 实现图像缩放
    【326】PIL 截图及图片识别
    【325】python**:selenium
    Android iOS Dribbble风格边栏菜单实现
    Prof UIS相关
    浅谈工作中的几点小心得
    zookeeper与activemq最新存储replicatedLevelDB整合
  • 原文地址:https://www.cnblogs.com/TMesh/p/11730999.html
Copyright © 2020-2023  润新知