草庐IT

PyTuple_SetItem

全部标签

python - setitem 和 getitem -- python

我创建了一个生成向量的python程序。现在我想使用函数__setitem__和__getitem__设置项目。例如,如果vector=Vec()andvector[3]=26会将空向量更改为[0,0,0,26]。我需要覆盖__getitem__和__setitem__我已经列出了下面的代码,但是我在使用get和set函数时遇到了问题。有什么建议吗?classVec:def__init__(self,length=0):self.vector=[0]*lengthdef__str__(self):return'[{}]'.format(','.join(str(i)foriinself

python - 性能差异 : obj. __setitem__(x,y) 与 obj[x] = y?

我正在编写一个具有属性访问权限的简单dict子类,并且在优化时偶然发现了一些看起来很奇怪的东西。我最初将__getattr__和__setattr__方法编写为self[key]等的简单别名,但后来我认为调用它应该更快self.__getitem__和self.__setitem__直接调用,因为它们可能会被[key]符号调用。出于好奇,我对这两个实现进行了计时,并发现了一些惊喜。下面是两个实现:如您所见,这里没有太多进展。#bracketsclassAttrDict(dict):def__getattr__(self,key):returnself[key]def__setattr_

相当于 Python 的 __setitem__ 的 JavaScript

varobj={}obj.__setitem__=function(key,value){this[key]=value*value}obj.x=2//4obj.y=3//9JavaScript没有__setitem__,这个例子显然行不通。在python中__setitem__工作方式如下:classCustomDict(dict):def__setitem__(self,key,value):super(CustomDict,self).__setitem__(key,value*value)d=CustomDict()d['x']=2#4d['y']=3#9是否可以在JavaSc

python - PyTuple_SetItem 的限制

我有一个Python扩展模块,它创建一个元组作为另一个对象的属性,并在元组中设置项目。每当我在Python中执行此模块时,我都会收到错误SystemError:badargumenttointernalfunction在阅读了PyTuple的文档并调试了我的程序几个小时后,我仍然无法弄清楚到底发生了什么。通过调试器运行我的程序表明问题发生在Python解释器内的库调用中。所以,最后,我看了下Python源码,终于明白了问题所在。PyTuple_SetItem函数有一个有趣的限制,我不知道,也找不到明确的记录。这是Python源代码中的重要函数(为清楚起见进行了编辑):intPyTupl

HTML localStorage setItem 和 getItem 性能接近 5MB 限制?

我正在构建一个使用HTMLlocalStorage的小项目。虽然我离localStorage的5MB限制还差得很远,但我还是决定进行压力测试。本质上,我将数据对象加载到单个localStorage对象中,直到它略低于该限制并且必须请求设置和获取各种项目。然后我非正式地为setItem和getItem的执行计时usingthejavascriptDateobject和事件处理程序(绑定(bind)get和set到HTML中的按钮,然后单击=P)性能非常糟糕,请求耗时600毫秒到5,000毫秒,最糟糕的情况下内存使用量接近200mb。这是在MacOSX上使用单个扩展程序(GoogleSpe

python - 子类化 Python 字典以覆盖 __setitem__

我正在构建一个子类dict并覆盖__setitem__的类。我想确定在所有可能设置字典项的情况下都会调用我的方法。我发现了三种情况,Python(本例中为2.6.4)在设置值时不调用我重写的__setitem__方法,而是直接调用PyDict_SetItem在构造函数中在setdefault方法中在update方法中作为一个非常简单的测试:classMyDict(dict):def__setitem__(self,key,value):print"Here"super(MyDict,self).__setitem__(key,str(value).upper())>>>a=MyDict
12