python基础教程:常量 (最全常量解析)

枫铃3年前 (2021-09-30)Python228

一、常量

变量是变化的量,常量则是不变的量。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 不可互换,即使它们有相似的名称和用途。 有关何时使用它的详细信息。

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

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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名字空间。

相关文章

Django中六个常用的自定义装饰器

装饰器作用 decorator是当今最流行的设计模式之一,很多使用它的人并不知道它是一种设计模式。使用它可以很方便地修改对象行为,...

python 利用pyttsx3文字转语音

# -*- coding: utf-8 -*- import pyttsx3 engine = pyttsx3.init() with open(&#...

Python语言防坑小技巧

Python语言防坑小技巧

一.赋值即定义 1.运行以下代码会出现报错 #!/usr/bin/env python #_*_conding:utf-8_*_ x ...

用Python制作一个简易的抽奖程序

用Python制作一个简易的抽奖程序

分析需求 我们先整理下...

Python3NumPy的常用函数

Python3NumPy的常用函数

1. txt文件 (1) 单位矩阵,即主对角线上的元素均为1,其余元素均为0的正方形矩阵。 在NumPy中可以用eye函数创建一...

用Python turtle库绘制蟒蛇

用Python turtle库绘制蟒蛇

Python的函数库 Python语言与C语言Java类似,可以大量使用外部函数库包含在安装包中的函数库:。 比如math, random,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。