gpt4 book ai didi

python类变量按值查找

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:55 28 4
gpt4 key购买 nike

我有一个带有用于错误/状态代码查找的静态变量的类。以HTTP状态码为例

class Foo(object):
OK = 200
Not_Modified = 304
Forbidden = 403
Internal_Server_Error = 500

现在我需要根据代码(200、403 等)检索口头状态(“OK”、“Not_Modified”等)。我无法修改类的结构,因为其他程序正在使用它。所以我创建了一个字典 description_by_val 包含 {code : description}:

from collections import Hashable

class Foo(object):
OK = 200
Not_Modified = 304
Forbidden = 403
Internal_Server_Error = 500
description_by_val = dict((value, key)
for key, value in locals().iteritems()
if not key.startswith("__") and value and isinstance(value, Hashable))


>>> Foo.description_by_val[200]
'OK'

现在我有性能和代码实践方面的问题。

  • 每次我调用Foo.description_by_val 都会导致重新生成字典吗?即使数据集很小,这也不好,因为这会被调用数百万次。
  • 这种方法只是不好的做法吗?我不想手动创建字典,我认为它应该是一个静态变量。

有什么想法吗?

更新:

我的同事刚刚向我指出,我可以在创建 description_by_val 期间打印一些东西,看看它是否会重新生成。

>>> from collections import Hashable
>>>
>>> def show(key):
... print key
... return True
...
>>>
>>> class Foo(object):
... OK = 200
... Not_Modified = 304
... Forbidden = 403
... Internal_Server_Error = 500
... description_by_val = dict((value, key)
... for key, value in locals().iteritems()
... if not key.startswith("__") and key and isinstance(value, Hashable) and show(key))
...
OK
Forbidden
Internal_Server_Error
Not_Modified
>>>
>>> Foo.description_by_val
{200: 'OK', 304: 'Not_Modified', 403: 'Forbidden', 500: 'Internal_Server_Error'}
>>> Foo.description_by_val
{200: 'OK', 304: 'Not_Modified', 403: 'Forbidden', 500: 'Internal_Server_Error'}
>>> Foo.description_by_val[200]
'OK'

我现在很高兴我不必担心性能。我想找出为什么它会这样:)

最佳答案

你的想法很好。字典不是每次都重新生成,只有第一次创建。 Lookup 高效且可靠,这不太可能导致我所看到的问题。使用这种反向字典非常普遍,而且您还可以在一个好的位置检查 isinstance(value, Hashable)。你应该没问题。

-- 已编辑 --

您的代码很好,我只是漏掉了尾随的括号。

关于python类变量按值查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10115558/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com