我有一个函数,它采用类似字符串的参数.
我想决定是否可以安全地存储参数并确保它不会改变.所以我想测试它是否可变,例如是否buffer()构建的结果array.array().
目前我使用:
type(s) == str
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?
(复制参数太昂贵了,这就是为什么我要避免它)
如果这只是您的缓存的启发式方法,请使用任何有效的方法。例如,isinstance(x, str) 几乎与现在一模一样。(假设您想要决定是否缓存;错误测试仅意味着缓存未命中,您没有做任何错事。)
(备注:事实证明,缓冲区对象是可散列的,即使它们的字符串表示形式可能会在您的脚下发生变化;下面的散列讨论很有趣,但并不是它想要的纯粹解决方案。)
然而,如果实例是不可变的,则良好实现的类应该具有可哈希的实例,而如果它们是可变的,则不应具有可哈希的实例。一般测试是对您的对象进行哈希处理并测试是否成功。
>>> hash({})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: dict objects are unhashable
Run Code Online (Sandbox Code Playgroud)
我确信这会产生误报,但可变对象可哈希严格来说是一个接口中断;我希望python 库类型遵循这个接口,对一个小样本的测试给出了正确的答案:
hashabe: str (Immutable), buffer (Warning, immutable slice of (possibly) mutable object!)
unhashable: list, array.array
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1112 次 |
| 最近记录: |