python - Python中SymbolType有什么用?

标签 python lisp types scheme symbols

这是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/

相关文章:

debugging - "is not of type LIST"错误

tree - LISP 编程 - 计算树节点的函数

c# - C# 的小数类型记帐安全吗?

c - 为什么这段代码会出现指针错误?

python - 标记化单词列表

python - 在极坐标中显示

python - 将长字符串转换为矩阵,并对其进行清理

Python:缩进错误

emacs - 在 Lisp/Emacs 中打印彩色字符

c++ - 对象工厂中的类型映射