【问题标题】:Can "__name__ ==" serve as a key to a dict? [closed]“__name__ ==”可以作为字典的键吗? [关闭]
【发布时间】:2014-04-28 16:48:06
【问题描述】:

编辑:
随附的代码有一些错误,这些错误与标题中的问题无关。答案很简单,所以我删除了不相关的代码,以便标题中提出的问题和答案对于那些搜索此类内容的人来说更清楚。感谢所有花时间阅读代码并给我一些反馈的人!

原始问题,删节: 当我的 Python 脚本尝试访问由'__name__ ==' 键入的dict 条目'"__main__":' 时,我似乎遇到了麻烦。我的问题与将这些字符串用作变量有关,还是我的脚本更有可能在其他地方失败? (SPOILER:我的算法错了。)

【问题讨论】:

  • 回答您的实际问题:是的,它是一个可散列的(字符串)对象,因此它可以是一个键。您的“错误”是KeyboardInterrupt - 究竟是什么问题?
  • 问题在于,只要 2-gram "_name_ ==" 出现,它就会挂起(似乎无限期地)。我已经复制了无数次了。我将每个可能出现的单词的默认概率设置为 1.0,所以我认为算法应该很快找到可接受的单词。
  • 我突然想到我没有考虑多余的引号,正如我们在\__name__ == "\__main__" Investigating now 中看到的那样。
  • 如果不具体分析为什么它似乎总是针对某个字符串失败,我可以告诉您,您的随机选择算法存在可能导致无限循环的固有缺陷。与其在做出无效选择时再次尝试,不如重写它以使无效选择不在可能的选择中。
  • 我的意思是,在您调用random.samplengram_to_kwordsgibbs_sample_data)的两种情况下,都存在选择先前失败的项目的可能性,从而允许它连续循环而没有成功。您需要以某种方式从选择池中删除失败的尝试,直到循环结束。

标签: python python-3.x dictionary hidden-markov-models


【解决方案1】:

'__name__''==' 都可以作为字典的键:

>>> d = {'__name__':1, '==':2}
>>> d['__name__']
1
>>> d['==']
2

【讨论】:

  • 感谢您的回答!我承认你或多或少地回答了这个问题。这有效,“name ==”(有问题的字符串)也是如此。不幸的是,你帮助我看到我应该改写这个问题。如果它看起来真的需要单独的帖子,我会回来并选择这个答案作为最佳答案。
猜你喜欢
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
  • 2011-03-08
  • 1970-01-01
相关资源
最近更新 更多