"幻数"的概念是否会因语言而异?

Ger*_*set 1 c c++ python magic-numbers concept

在C/C++中使用以下代码,例如:

int foo[] = {0, 0, 0, 0};
Run Code Online (Sandbox Code Playgroud)

没有神奇的数字吧?
现在,Python的"等效"将是:

foo = [0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)

仍然没有神奇的数字.
但是,在Python中,同样的事情可以写成:

foo = [0] * 4
Run Code Online (Sandbox Code Playgroud)

现在我们有一个神奇的数字.或者我们呢?
我猜这个和其他类似的东西出现在这些和其他语言上.

Joc*_*zel 11

并非每个数字都是魔术常数.原因4和四个0是幻数(在任何语言中)是完全不清楚为什么这个数字是,4而不是任何其他数字.

例如,在用众所周知的六面模具玩的游戏的背景下

def roll_die():
    return random.randint(1,6)
Run Code Online (Sandbox Code Playgroud)

这段代码没有神奇的数字,因为很容易看到数字的来源.

另一方面,很难猜出其他程序员知道哪些数字.例如,并非所有人都知道牌组中牌的数量,因此在那里使用命名常量更有意义.

如果一个数字是"魔法",它完全取决于上下文,它与语言无关.如有疑问,请将您的常量命名为安全.

  • 模具有4,6,8,10,12或20个侧面 - 对于某些"模具"值. (7认同)

Ben*_*igt 5

与(在C或C++中)有何不同:

int foo[4] = {0};
Run Code Online (Sandbox Code Playgroud)

在所有这些情况下,数组的大小都是一个神奇的数字.