这是SymbolType向 Python 添加符号的包。那些对 Lisp/Scheme 做过任何有用的事情的人可以告诉我如何在 Python 中利用这种类型吗?
它可以用来将来自外部(来自网络)的字符串与内部代码隔离吗?
$ sudo easy_install SymbolType
$ ipython
不幸的是,您不能使用符号将值作为 kwargs 传递:
In [7]: X = s('X', __name__)
In [9]: a = {X: 10}
In [12]: Y = s('Y', __name__)
In [13]: a.update({Y: 20})
In [14]: a
Out[14]: {X: 10, Y: 20}
In [15]: for (k, v) in a.items():
....: print k, v
Y 20
X 10
In [16]: def z(X=0,Y=1):
....: print X, Y
....:
In [17]: z(**a)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
...<ipython console> in <module>()
TypeError: z() keywords must be strings
最佳答案
符号不能替代字符串。虽然两者都由 字符序列,在以下情况下不应使用符号代替字符串 这是主导属性(property)。符号代表独特的身份。 这意味着指针相等 (而不是内容相等)可以用来比较它们。 因此,符号经常被用作常量、枚举元素、哈希表键 或标识符(在 lisp 中)。
在 Lisp 中,第一次引用一个符号时,会在 符号表已创建。如果此后引用相同的符号, 它将被查找并代表相同的值。
我不是 Python 程序员,但由于符号没有内置于 对于Python语言来说,它们的使用可能会受到限制或者不是很方便。 您不应该使用它们来隔离字符串。为此使用包装类。
编辑:通读 SymbolType 文档,我发现它们捆绑了原始
命名空间(通过__name__
)。 Common Lisp 也这样做。人们也许可以使用这个
以某种方式提供设施。
另请阅读this question .
关于python - Python中SymbolType有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3123935/