是否有一个相当于Ruby符号的Python?

是否有一个相当于Ruby符号的Python?

  • 如果是的话那是什么?

  • 如果不是那么我们坚持使用string作为我们在字典中的

不,python没有符号types。

但是string文字是默认实现的,其他string可以用intern函数实现。 因此,在字典中使用string作为键是比在ruby中使用符号更低的性能。

正如其他人所说,Python中没有符号,但string运行良好。

要避免将string引用为键,请使用dict()构造函数语法:

 d = dict( a = 1, b = 2, c = "Hello there", ) 
  1. 不,没有相同的东西。
  2. 不,您可以使用每个可哈希对象作为字典键。

对于那些感兴趣的人来说:Ruby中的符号在散列中使用时非常类似于python中的空对象。 比如你可以这样做:

 some_var = object() 

然后设置一个字典键为some_var:

 some_dict = { some_var : 'some value' } 

然后做一个标准的检索:

 some_dict[some_var] 

然而,正如sepp2k所指出的,这样做没有性能优势。 事实上,我做了一个快速testing,并注意到几乎没有性能提升:

 a, b, c, d, e = [object() for _ in range(5)] dict_symbols = {a : 'a', b : 'b', c : 'c', d : 'd', e : 'e'} dict_strings = {'a' : 'a', 'b' : 'b', 'c' : 'c', 'd' : 'd', 'e' : 'e'} def run_symbols(): for key in dict_symbols.keys(): dict_symbols[key] def run_strings(): for key in dict_strings.keys(): dict_strings[key] 

在ipython中testing速度:

 In [3]: %timeit run_symbols 10000000 loops, best of 3: 33.2 ns per loop In [4]: %timeit run_strings 10000000 loops, best of 3: 28.3 ns per loop 

所以在我的情况下,'符号'运行速度较慢! (对于有趣的数字,不准确)。 但是要注意的是,这样做可能会带来内存方面的优势。 如果你不关心键的types,对象的占用面积比string要小。

 import sys sys.getsizeof('some_var') # 45 some_var = object() sys.getsizeof(some_var) # 0 

虽然这引发了python如何处理variables名some_var的内存的问题。

不是一stream的types,但确实存在https://pypi.python.org/pypi/SymbolType