首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有等同于Ruby符号的Python?

有没有等同于Ruby符号的Python?
EN

Stack Overflow用户
提问于 2010-09-19 05:14:17
回答 5查看 17.3K关注 0票数 79

有没有等同于Ruby符号的Python?

  • 如果是,那么它是什么?
  • 如果不是,那么我们是否只能在字典中使用strings作为我们的
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-09-19 05:19:14

不,python没有符号类型。

但是,字符串文字在缺省情况下是内嵌的,而其他字符串可以使用intern函数内嵌。因此,在字典中使用字符串字面值作为键并不比在ruby中使用符号的性能差。

票数 78
EN

Stack Overflow用户

发布于 2010-09-19 07:21:41

正如其他人所说,Python中没有符号,但字符串工作得很好。

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

d = dict(
    a = 1,
    b = 2,
    c = "Hello there",
    )
票数 20
EN

Stack Overflow用户

发布于 2014-04-22 14:43:41

对于那些感兴趣的人: Ruby中的符号在用于散列时与python中的空对象非常相似。例如,您可以这样做:

some_var = object()

然后将字典键设置为some_var:

some_dict = { some_var : 'some value' }

然后执行标准检索:

some_dict[some_var]

然而,正如sepp2k所指出的那样,这样做并没有性能上的好处。事实上,我做了一个快速测试,发现性能几乎没有提升:

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中测试速度:

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

因此,在我的例子中,“符号”运行得更慢!(对于有趣的数字,不准确)。然而,需要注意的是,这样做可能有内存优势。如果您不关心键类型,那么对象比字符串占用的空间更小。

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

尽管这提出了一个问题,python如何处理变量名some_var的内存。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3743532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档