首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

构造Python中的常量

构建常量 Python中不存在像const那样的常量关键字,只是在内建空间中提供了一小部分常量,比如True、False、None等。那么在Python中如何使用常量呢?...一般来说有如下两种方法: 通过命名风格来提示使用者该变量代表的意义为常量,比如MAX_NUMBER、TOTAL。...然而这种方式并没有真正实现常量,其对应的值仍然可以被改变,这只是一种约定俗成的风格。 通过自定义实现常量功能。这要求符合“命名全部为大写”和“值一旦被绑定便不可再修改”这两个条件。...= value import sys sys.modules[__name__] = _const() 如果上面的代码对应的模块名为const,使用的时候只要import const,便可以直接定义常量了...---- 将常量集中到一个文件 无论采用那种方式实现常量,都建议将常量集中到一个文件中,因为这样有利于维护,一旦修改常量的值,可以集中统一进行而不是逐个进行检查。

3.3K20

Python 定义自己的常量

在很多高级语言中都会提供常量的关键字来定义常量,如 C++ 中的 const , Java 中的 final 等,但是 Python 语言因为变量无类型,所以也就不存在这样的修饰符,其本身并未提供任何机制来进行常量的定义...因此我们只能通过自己定义的方法来定义一个符合常量规则的,使得该类定义的成员属性满足常量的属性。...由于常量的值一旦绑定则不可再修改,所以也就是说对常量二次赋值时需要抛出异常。因此我们显然需要改写自定义的常量的赋值方法。...在 Python 中,当我们对的属性进行赋值时,会自动调用 object 的 __setattr__() 函数,该函数的定义如下: object....异常处理的定义方式请参看:Python 错误和异常 定义常量: constant.py import sys class _const: # 自定义异常处理 class ConstError

3.7K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    常量接口 vs 常量 vs 枚举区别

    常量定义在接口里与里都能通过编译,那2者到底有什么区别呢? 那个更合理?...开发人员在没有参考资料时, 不可能知道某个 int 型的参数到底应该赋什么内容 编译时, 是直接把常量的值编译到的二进制代码里, 常量的值在升级中变化后, 需要重新编译所有引用常量, 因为里面存的是旧值...String CONST_C = "cc"; private ConstClassA() { } } 常量可以设置构造函数为 private 从而限制继承, 也就没有继续添加常量的问题了...编译时, 没有把常量值编译到代码里, 即使常量的值发生变化也不会影响引用常量 enum 类型 public static enum Grade { A(4), B(3),...查看 enum 反编译后的代码与枚举常量的结构非常相似 这可能是因为 java 的设计者一开始觉得 enum 与 OO 思想不符 所以没有提供支持, 但是随着常量接口的滥用和枚举常量方案的出现 才在

    18330

    String 常量

    String-Pool-Java String 类型的常量池比较特殊,它的主要使用方法有两种: 直接使用双引号声明出来的 String 对象,会直接存储在常量池中 如果不是用双引号声明的 String...String.intern() 是一个 Native 方法,它的作用是:如果运行常量池中已经包含一个等于此 String 对象内容的字符串,则返回常量池中该字符串的引用;如果没有,则在常量池中创建与此...String 内容相同的字符串,并返回常量池中创建的字符串的引用。...System.out.println(s1.equals(s2)); // 输出 true 8 种基本类型的包装常量池 Java 基本类型的包装的大部分都实现了常量池技术,即 Byte,Short...,Integer,Long,Character,Boolean;这 5 种包装默认创建了数值[-128,127] 的相应类型的缓存数据,而超出此范围的仍然会去创建新的对象 两种浮点数类型的包装 Float

    54020

    EasyC++62,常量枚举

    这是EasyC++系列的第62篇,常量枚举。 常量 有的时候, 我们希望能给当中定义一些常量,可以给所有的对象使用。...比如说我们在当中定义一个数组,希望可以定义一个常量,用来初始化数组的长度。既然是用来初始化数组长度的,那么这个值自然也不会改变,我们定义成const是否可行呢?...这个常量会和其他静态变量存储在一起,而不是存储在对象里,这样的话也就被所有对象共享了。 对于像是Java、Python等其他语言来说,中的静态变量是可以通过名直接访问的,而C++中不行。...通过这种方式声明并不会创建数据成员,对于的对象来说,并不包含枚举,这里的N只是一个符号名称。在当中遇到它的时候,编译器会用15来代替。...也正是因为我们只是为了创建符号常量,而不是创建枚举类型的变量,所以不需要提供枚举名。有一些C++的库当中也用到了这种方法,比如ios_base::fixed等。

    29330

    PHP面向对象-常量

    在 PHP 中,常量是指在定义中定义的固定值,一旦定义就不可改变。常量可以被的任何方法调用,也可以通过名直接访问。...与普通变量不同,常量在定义时必须被赋值,并且不能被重新赋值或取消定义。常量是通过 const 关键字定义的。...常量的访问方式有两种:通过名直接访问和通过对象访问。...通过名直接访问常量的语法格式如下:ClassName::CONSTANT_NAME通过对象访问常量的语法格式如下:$objectName::CONSTANT_NAME下面是一个使用常量的示例:class...我们还通过 Math::PI 直接访问 Math 常量 PI。常量也可以用于定义全局常量,这样可以确保这些常量在应用程序的所有部分中都是一致的。

    86030

    【说站】java常量是什么

    java常量是什么 1、在Java中,经常希望某个常量可以在一个的多个方法中使用,通常将这些常量称为常量。 可以使用关键字 static final 设置一个常量。...2、常量的定义位于main方法的外部,因此,在同一个的其他方法中也可以使用这个常量。 而且,一个常量被声明为public,那么其他的方法也可以使用这个常量。... *********************************/ /**  * Common常量列表(存放公共的常量)  ***/ public static final class Common...*********************************/ /**  * User 存放和User相关的常量  ***/ public static final class User {  ...return USER_IN_SESSION; }   // public static String USER_NAME() { return USER_NAME; } }   } 以上就是java常量的介绍

    28720

    python常量和变量

    1.1 常量 常量是内存中用于保存固定值的单元,在程序中常量的值不能发生改变;python并没有命名常量,也就是说不能像C语言那样给常量起一个名字。...python常量包括:数字、字符串、布尔值、空值; 一般所有字母大写 例子 1 PI =3.141592653 2 print(PI) 3 PI =3 4 print(PI) 1.2 变量 变量是内存中命名的存储位置...,与常量不同的是变量的值是可以动态变化的;python中变量的命名规则如下: 变量的名字的第1个字符必须是字母或下划线(_); 变量的名字的第1个字符后边可以使由字母、下划线(_)、或数字(0~9)组成...; 变量的名字是区分大小写的,也就是说Score和score是不同的; 在python中对变量进行赋值时,使用单引号和双引号的效果是完全一样的; python中已经被使用的一些关键字不能用于声明变量;...print((3+6)/5) print((3+6)/5+3) print(((3+6)/5+3)*2) 命名规范 1.用数字.字母.下划线组成 2.不能用数字开头.更不能是纯数字 3.不能使用python

    78750

    Java八种包装常量

    Java常量池是Java内存管理中的一个重要概念,主要用于存储字符串常量、基本类型包装常量和方法的全限定名等。...在Java中,当创建一个字符串、基本类型包装引用时,JVM会首先检查常量池中是否已存在该对象。如果存在,则直接返回对该对象的引用;如果不存在,则在常量池中创建一个新的对象并返回引用。...这意味着在Java程序中,两个相等的字符串常量或基本类型包装常量实际上是指向常量池中同一个对象的引用。Java常量池主要包括以下几个部分:字符串常量池:用于存储字符串字面量。...元数据常量池:用于存储的元数据信息,如名、方法名、字段名等。这些信息在加载过程中被解析并存储在常量池中,供后续使用。运行时常量池:是方法区的一部分。...JVM为每个已加载的类型(或接口)维护一个运行时常量池。运行时常量池包含多种常量,包括编译期产生的各种字面量和符号引用,这部分内容将在加载后存放到方法区的运行时常量池中。

    17710

    【小家java】java中维护常量使用常量?接口?还是枚举呢?

    因为我在阅读《Effective Java》这本书中提到过: 如果某个实现了常量接口的被修改不再需要常量了,也会因为序列化兼容原因不得不保持该实现,而且非final实现常量接口会导致所有子类被污染...而应当用在与之相关的中。这样能保持很好的层级关系和隔离性,方便分包和扩展,具体请参考spring中对常量维护的原则。...当然,刚才说了不建议把一般的常量放在接口里,所以我们可以放在常量了,但建议常量是final的。 什么时候使用枚举呢?其实建议使用枚举。...此处个人不建议什么都使用枚举来代替常量。比如毫无规则归类可言的一些常量:如SUCCUSS字符串、密钥串、路径等等这些,可以放在一个常量里面糅在一起。...而常量可以收集管理一些比较杂的一些常量。而接口的中的常量,在遵循开闭原则的基础上,向上抽象管理自己的内聚的常量 4、最后 写代码也是一种艺术,结构层次好的代码可以少出bug,提高效率。

    4K21

    C++:09---静态成员、常量成员

    但是建议在内定义、外初始化 可以直接通过名直接访问 class Cperson { private: static int age; static int getAge();...静态函数 因为静态函数不属于某一对象,所以函数内不存在this指针 静态成员函数不能被声明为const类型(“静态成员函数是属于的,而不是某个具体对象,在没有具体对象的时候静态成员就已经存在,静态成员函数不会访问到非静态成员...::age=18; void Cperson::setPerson() { age=20;//正确,可调用静态成员 height=178;//错误,不可调用普通成员 } 二、常量成员...const数据成员只能在构造函数的初始化列表进行初始化 const数据成员在初始化之后,不允许再次修改值 class Cperson { private: const int age;//常量数据成员...当对象为常量对象时,只允许访问常量函数成员 class Cperson { private: const int age;//常量数据成员 float height; public

    1.6K40

    Python优化机制:常量折叠

    在本文中,我们深入探讨了什么是常量折叠,了解了它在 Python 世界中的适用范围,最后解读了 Python 的源代码(即 CPython),并分析出 Python 是如何优雅地实现它。...因此,上述表达式可以等效地被执行为: >>> day_sec = 86400 Python 中的常量折叠 在 Python 中,我们可以使用反汇编模块(Disassembler)获取 CPython...常量折叠的适应范围 Python 会尝试折叠每一个常量表达式,但在某些情况下,即使该表达式是常量,但是 Python 并不会对其进行折叠。.../) Python dis模块与常量折叠(https://yasoob.me/2019/02/26/python-dis-module-and-constant-folding/) CPython实现常量折叠的简单方法...(https://utcc.utoronto.ca/~cks/space/blog/python/CPythonConstantFolding) AST的常量折叠优化过程(https://bugs.python.org

    77500
    领券