【发布时间】:2017-01-08 17:53:57
【问题描述】:
我知道 Python 有它所谓的“命名空间”,但我希望按照 security.crypto.hash.md5("b") 之类的行编写一些代码。 JavaScript 没有命名空间,但可以使用对象表示法复制它们的行为:
var stdlib = {
math: {
constants: {
e: 2.718281828,
pi: 3.141596535,
silver: 2.414213562
},
operations: {
add: function(a, b) {
return a + b;
},
subtract: function(a, b) {
return a - b;
},
multiply: function(a, b) {
return a * b;
},
divide: function(a, b) {
return a / b;
}
},
abs: function(a) {
if (a < 0) {
return 0 - a;
} else {
return a;
}
},
sgn: function(a) {
if (a > 0) {
return 1;
} else if (a < 0) {
return -1;
} else {
return 0;
}
}
}
}
这允许编写如下代码:
var i = 0;
var j = 1;
var n = stdlib.math.operations.add(i, j);
var constants = Object.create(stdlib.math.constants);
var ops = Object.create(stdlib.math.operations);
var z = ops.multiply(n, constants.e);
在 Python 中,模块通过将它们放置在文件夹中而被分隔成命名空间,因此 os 和 os.path 分别代表 $ROOT/osand ``$ROOT/os/path。有没有办法避免这种情况并做一些模拟命名空间的事情,比如上面的 JavaScript 技巧?
【问题讨论】:
标签: python namespaces