代码之家  ›  专栏  ›  技术社区  ›  culebrón

SymbolType在Python中有什么用途?

  •  1
  • culebrón  · 技术社区  · 15 年前

    这是你的答案 SymbolType 向Python添加符号的包。那些用Lisp/Scheme做过任何有用工作的人能告诉我如何在Python中利用这种类型吗?

    $ sudo easy_install SymbolType
    $ ipython
    

    很遗憾,不能使用符号将值作为Kwarg传递:

    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
    
    1 回复  |  直到 15 年前
        1
  •  3
  •   Community CDub    8 年前

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

    在Lisp语言中,第一次引用符号时,在 它将被查找并表示相同的值。

    我不是一个Python程序员,但是因为符号不是内置的 在Python语言中,它们的使用可能会受到限制或者不是很方便。 你不应该用它们来隔离字符串。为此使用包装器类。

    编辑:通过阅读SymbolType文档,我看到它们捆绑了源代码 __name__ ). Common Lisp也能做到这一点。你可以用这个

    this question .