我将statistics模块的mean函数的性能与简单的sum(l)/len(l)方法进行比较,发现由于某种原因, mean函数非常慢。 我用下面的两个代码片段timeit来比较它们,有没有人知道是什么原因导致执行速度的巨大差异? 我正在使用Python 3.5。 from timeit import repeat print(min(repeat('mean(l)', '''from random import randint; from statistics import mean; \ l=[randint(0, 10000) for i in range(10000)]''', repeat=20, number=10))) 上面的代码在我的机器上执行约0.043秒。 from timeit import repeat print(min(repeat('sum(l)/len(l)', '''from random import randint; from statistics import mean; \ l=[randint(0, 10000) for i in range(10000)]''', repeat=20, number=10))) 上面的代码在我的机器上执行大约0.000565秒。
这里有两个问题。 我有一套通常是带有BOM的UTF-8的文件。 我想将它们(理想情况下)转换为UTF-8,不含BOM。 看起来像codecs.StreamRecoder(stream, encode, decode, Reader, Writer, errors)将处理此。 但是我没有看到使用过程中的任何好例子。 这是处理这个问题的最好方法吗? source files: Tue Jan 17$ file brh-m-157.json brh-m-157.json: UTF-8 Unicode (with BOM) text 另外,如果我们能够处理不同的input编码而不明确地知道(见ASCII和UTF-16),那将是理想的。 看来这应该都是可行的。 是否有解决scheme,可以采取任何已知的Python编码和输出为UTF-8没有BOM? 编辑1从下面sol'n(谢谢!) fp = open('brh-m-157.json','rw') s = fp.read() u = s.decode('utf-8-sig') s = u.encode('utf-8') print fp.encoding fp.write(s) 这给了我以下错误: IOError: [Errno 9] Bad file descriptor 新闻快报 我被告知在评论中,错误是我用模式'rw'而不是'r +'/'r + b'打开文件,所以我最终应该重新编辑我的问题,并删除解决的部分。
class C(object): def f(self): print self.__dict__ print dir(self) c = C() cf() 输出: {} ['__class__', '__delattr__','f',….] 为什么自我中没有“f”.__ dict__
我有一些非常奇怪的行为,似乎导致无声的例外。 我如何编写一个通用的try catch来debugging所有的exception。 有些东西是: try: # something that fails except e: print e 更详细地介绍一下这个问题: 我有一个Django应用程序,在我的计算机上(Ubuntu Linux 8.10)通过runserver和mod-python工作正常。 在部署服务器上(Ubunut Linux 8.10),它通过runserver正常工作,但通过mod-python中的apache失败。 我已经将原因减less到了使用Berkeley DB(bsddb.db)和辅助键的应用程序的一部分。 辅助键的callback方法使用pickle来格式化键。 当我调用一个单一的值时,它失败。 但是,只有当我使用cPickle时才会失败,并且在callback函数之外的相同值上使用pickle也是可行的。 我只是想知道为什么它与cPickle失败。
我发现非常有用的语法 parser.add_argument('-i', '–input-file', type=argparse.FileType('r'), default='-') 用于指定一个input文件或使用stdin,这两个我都想在我的程序中使用。 但是,input文件并不总是必需的。 如果我不使用-i或redirectinput $ someprog | my_python_prog $ my_python_prog < inputfile 我不希望我的Python程序等待input。 我希望它只是移动并使用默认值。
[编辑:这个问题只适用于32位系统。 如果你的计算机,你的操作系统和你的python实现是64位的,那么mmap-large文件的工作是可靠的,效率非常高。 我正在写一个模块,其中包括允许按位读取访问文件。 这些文件可能很大(数百GB),所以我写了一个简单的类,让我像string一样对待文件,并隐藏所有的查找和读取。 当时我写封装类,我不知道mmap模块 。 在阅读mmap的文档时,我认为“很好 – 这正是我所需要的,我将取出我的代码,并用mmapreplace它,这可能更有效,删除代码总是好的。 问题是,mmap不适用于大文件! 这对我来说是非常惊人的,因为我认为这也许是最明显的应用。 如果该文件高于几千兆字节,那么我得到一个EnvironmentError: [Errno 12] Cannot allocate memory 。 这只会发生在一个32位的Python版本,所以它似乎没有地址空间,但我找不到任何文档。 我的代码只是 f = open('somelargefile', 'rb') map = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) 所以我的问题是我在这里错过了一些明显的东西? 有没有办法让mmap在大文件上移植工作,还是应该回到我的天真文件包装? 更新:似乎有一种感觉,Python mmap应该与POSIX mmap具有相同的限制。 为了更好地expression我的挫折感,这里有一个简单的类,它只有mmap的一小部分function。 import os class Mmap(object): def __init__(self, f): """Initialise with a file object.""" self.source = f def __getitem__(self, key): try: # […]
以下是我目前如何将元组列表转换为Python中的字典: l = [('a',1),('b',2)] h = {} [h.update({k:v}) for k,v in l] > [None, None] h > {'a': 1, 'b': 2} 有没有更好的办法? 似乎应该有一个class轮来做到这一点。
我指的是collections模块中的OrderedDict 。 如果它具有可订购的附加function,我认为可能经常不需要,但即使如此,是否有任何缺点? 它慢吗? 它是否缺less任何function? 我没有看到任何遗漏的方法。 总之,为什么我不应该总是用这个而不是一个正常的字典呢?
def maker(n): def action(x): return x ** n return action f = maker(2) print(f) print(f(3)) print(f(4)) g = maker(3) print(g(3)) print(f(3)) # still remembers 2 为什么嵌套函数会记住第一个值2即使maker()已经返回并在调用action()的时候退出?
我是Python新手,熟悉其他 语言的Multimaps实现。 Python是否具有内置的这种数据结构,或者可以在常用的库中使用? 为了说明我的意思是“多图”: a = multidict() a[1] = 'a' a[1] = 'b' a[2] = 'c' print(a[1]) # prints: ['a', 'b'] print(a[2]) # prints: ['c']