【问题标题】:What can be the use of SymbolType in Python?Python 中 SymbolType 的用途是什么?
【发布时间】:2011-03-08 15:01:16
【问题描述】:

这是向 Python 添加符号的 SymbolType 包。那些使用 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

【问题讨论】:

    标签: python lisp types scheme symbols


    【解决方案1】:

    符号不能替代字符串。虽然两者都由 字符序列,不应使用符号代替字符串 这是主要属性。符号代表一个独特的身份。 这意味着指针相等 (而不是内容相等)可以用来比较它们。 为此,符号经常被用作常量、枚举元素、哈希表键 或标识符(在 lisp 中)。

    在 Lisp 中,第一次引用符号时,在 创建符号表。如果此后引用相同的符号, 它将被查找并表示相同的值。

    我不是 Python 程序员,但因为符号没有内置 Python 语言,它们的使用可能受到限制或不太方便。 您不应该使用它们来隔离字符串。为此使用包装类。

    编辑:通读 SymbolType 文档,我看到他们捆绑了原始的 命名空间(通过__name__)。 Common Lisp 也能做到这一点。一个人也许可以使用这个 以某种方式提供设施。

    另请阅读this question

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-11
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      相关资源
      最近更新 更多