草庐IT

Python的魔法方法:__init__(),__getitem__()和__len__()

Python的魔法方法(MagicMethod)是Python的一种高级语法,允许你在类中自定义方法,魔法方法的命名格式为以双下划线开头并以双下划线结尾,例如:__xxx__()。当Python解释器遇到特殊句法时,会去自动调用特殊方法,例如:classFUN():#MagicMethod:__str__def__str__(self)->str:return"Hello,world!"fun=FUN()print(fun)运行结果如下:Hello,world!PyTorch要求:一个自定义的Dataset类,必须实现三个魔法方法:__init__():在创建类的一个新实例时,自动调用,实现该

python - 为什么 list[::-1] 不等于 list[:len(list):-1]?

在python中切片时,省略切片的end部分(即list[:end:]中的end)会导致end被定义为“被切片的字符串的大小”。*但是,当使用step参数(list[::step]中的step)时,这似乎并不适用在切片中,至少当step参数为-1时。一个简单的例子:>>>l=[1,2,3]>>>l[::-1][3,2,1]>>>l[:len(l):-1][]这表示在传递step参数的情况下,省略end值不等同于显式传递大小被切片的对象。也许这只是我阅读文档的失败,但我想了解为什么我上面的示例似乎与Python文档中关于在切片中省略end值的内容相矛盾,理想情况下记录了不同。*Slice

python - 列表中最长单词的长度

获取最长单词的长度的更pythonic方法是什么:len(max(words,key=len))或者:max(len(w)forwinwords)或者..别的什么?words是一个字符串列表。我发现我需要经常这样做,并且在使用几个不同的样本大小进行计时后,第一种方法似乎始终更快,尽管表面上看起来效率较低(len的冗余被调用两次似乎没关系-在这种形式的C代码中会发生更多事情吗?)。 最佳答案 虽然:max(len(w)forwinwords)是否更容易“阅读”——您有生成器的开销。同时:len(max(words,key=len))可

python - 有没有 len(someObj) 没有调用 someObj 的 __len__ 函数的情况?

有没有len(someObj)没有调用someObj的__len__函数的情况?我最近用后者替换了前者以(成功)加速一些代码。我想确保不存在len(someObj)与someObj.__len__()不同的边缘情况。 最佳答案 如果__len__返回的长度超过sys.maxsize,len()将引发异常。直接调用__len__是不正确的。(事实上​​,您可以从__len__返回任何对象,除非它通过len()才能被捕获。) 关于python-有没有len(someObj)没有调用someO

Python:理解 append 和扩展之间的区别

下面的代码不会在当前状态下运行。但是,如果我将sum_vec.extend(vec1[i]+vec2[i])更改为sum_vec.append(vec1[i]+vec2[i])它会起作用正好。我理解追加和扩展之间的基本区别,但我不明白为什么如果我使用扩展代码就不起作用。defaddVectors(v1,v2):vec1=list(v1)vec2=list(v2)sum_vec=[]vec1_len=len(vec1)vec2_len=len(vec2)min_len=min(vec1_len,vec2_len)#addingupelementspointwiseifvec1_len==

python - 获取没有 len(list) 的上一个对象

这种格式的代码如何获取上一个或下一个对象?alignment=[[a,b,c],[2,3,4],[q,w,e]]forobjinalignment:somecodeheretogetpreviousobject我知道如何做到这一点:foriinrange(0,len(alignment)):alignment[i-1][objIndex] 最佳答案 您可以使用enumerate:alignment=[[a,b,c],[2,3,4],[q,w,e]]forindex,objinenumerate(alignment):alignmen

python - 'generator' 类型的对象没有 len()

刚开始学python。我想在NLTK中编写一个程序,将文本分解为一元字母、二元字母。例如,如果输入文本是..."Iamfeelingsadanddisappointedduetoerrors"...我的函数应该生成如下文本:Iam-->amfeeling-->feelingsad-->sadand-->anddisappointed-->disppointeddue-->dueto-->toerrors我已经编写了将文本输入程序的代码。这是我正在尝试的功能:defgen_bigrams(text):token=nltk.word_tokenize(review)bigrams=ngra

python - 使用 len()、max() 和 min() 等静态函数相对于继承方法调用的优势

我是python新手,我不确定为什么python在obj.len()、obj.max()和obj.min()在方法调用上使用len()...有哪些优点和缺点(除了明显的不一致)?为什么Guido选择这个而不是方法调用?(如果需要,这可以在python3中解决,但它在python3中没有改变,所以一定有充分的理由......我希望)谢谢!! 最佳答案 最大的优势是内置函数(和运算符)可以在适当的时候应用额外的逻辑,而不是简单地调用特殊方法。例如,min可以查看多个参数并应用适当的不等式检查,或者它可以接受单个可迭代参数并进行类似的处理

python - 替代 'for i in xrange(len(x))'

所以我在anotherpost中看到以下“错误”片段,但我看到的唯一替代方案涉及修补Python。foriinxrange(len(something)):workwith=something[i]#dothingswithworkwith...我该怎么做才能避免这种“反模式”? 最佳答案 如果需要知道循环体中的索引:forindex,workwithinenumerate(something):print"element",index,"is",workwith 关于python-替代

python - 在 zip 对象列表上执行 len 会清除 zip

这个问题在这里已经有了答案:Whycan'tIiteratetwiceoverthesamedata?(4个答案)关闭4年前。我在使用zip()函数时看到一个奇怪的行为。当我执行以下操作len(list(z))其中z是一个zip对象时,结果为0(这对我来说似乎是错误的),并且该操作似乎清除了zip对象。有人可以帮我了解发生了什么吗。#python3Python3.2.3(default,Sep302012,16:41:36)[GCC4.7.2]onlinux2Type"help","copyright","credits"or"license"formoreinformation.>>