你怎么知道常数是什么?

时间:2016-05-05 04:52:25

标签: python constants

student_name是不是常数?

student_name = ""

while len(student_name) > 1:
    int(input(User input name of student and store this in variable student_name))

2 个答案:

答案 0 :(得分:2)

这取决于你所谓的常数。 Python具有不可变对象。像字符串。请记住,在Python中,变量基本上是对象上的标签。所以,如果你写

x = 'foo'

标签x用于不可变字符串'foo'。如果你那么做

x = 'bar'

你没有改变字符串,你只是将标签挂在另一个字符串上。

但是不可变的对象并不是我们通常认为的常量。在Python中,常量可以被认为是不可变的标签;一个变量(标签),一旦分配就无法更改。

直到最近,Python还没有那些。通过约定,全大写的名称表示不应该更改它。但这并没有被语言强制执行。

但是自从Python 3.4(并且还向后移植到2.7)以来,我们有enum模块来定义不同类型的枚举类(实际上是单例)。枚举基本上可以用作常量组。

以下是比较文件的函数返回枚举的示例;

from enum import IntEnum
from hashlib import sha256
import os

# File comparison result
class Cmp(IntEnum):
    differ = 0  # source and destination are different
    same = 1  # source and destination are identical
    nodest = 2  # destination doesn't exist
    nosrc = 3  # source doesn't exist


def compare(src, dest):
    """
    Compare two files.

    Arguments
        src: Path of the source file.
        dest: Path of the destination file.

    Returns:
        Cmp enum
    """
    xsrc, xdest = os.path.exists(src), os.path.exists(dest)
    if not xsrc:
        return Cmp.nosrc
    if not xdest:
        return Cmp.nodest
    with open(src, 'rb') as s:
        csrc = sha256(s.read()).digest()
    if xdest:
        with open(dest, 'rb') as d:
            cdest = sha256(d.read()).digest()
    else:
        cdest = b''
    if csrc == cdest:
        return Cmp.same
    return Cmp.differ

这使您无需查看每次使用compare的返回值时实际意味着什么。

定义后,您无法更改enum现有属性。这里有一个惊喜;您可以稍后添加新属性,然后可以更改这些属性。

答案 1 :(得分:0)

不,没有。您不能在Python中将变量或值声明为常量。只是不要改变它。

如果你在课堂上,那么等同于:

class Foo(object):
    CONST_NAME = "Name"

如果没有,那只是

CONST_NAME = "Name"

以下代码段可能会帮助您Link