在Python 2中,我们可以重新分配True和False (但不是None ),但是所有三个( True , False和None )都被认为是内置variables。 然而,在Py3k中,所有这三个都按照文档更改为关键字。 从我自己的猜测来看,我只能猜测是为了防止这种来自旧的True, False = False, True恶作剧。 但是,在Python 2.7.5中,也许在之前,诸如None = 3语句被重新分配。 None引发SyntaxError: cannot assign to None 。 从语义上讲,我不相信True , False和None是关键字,因为它们是Java的最后一个语义文字。 我检查了PEP 0(索引),我找不到PEP解释为什么他们改变了。 有没有性能优势或其他原因,使他们的关键字,而不是文字或特殊 – 他们像None Python在Python2?
pythonunit testing框架中的setUpClass与setUp之间的区别,为什么不在setUp中设置setUp而不是setUpClass? 我想了解setUp和setUpClass函数以及tearDown和tearDownClass所做的设置的哪一部分。
我需要使用ImageMagick作为PIL没有我正在寻找的图像function的数量。 不过,我想用Python。 Python绑定(PythonMagick)自2009年以来一直没有更新。我唯一能够find的是使用命令行界面的os.system调用,但这看起来很笨重。 有没有什么办法直接使用ctypes和某种types的转换来访问API? 作为最后的手段,那里有其他的图书馆有像ImageMagick这样的大量图像编辑工具,我已经看过了?
这里是我如何检查mystring是否以string开头: >>> mystring.lower().startswith("he") True 问题是mystring很长(数千个字符),所以lower()操作需要很多时间。 问题:有没有更有效的方法? 我不成功的尝试: >>> import re; >>> mystring.startswith("he", re.I) False
尝试着深入Qt,但还没有做一个大型的项目。 目前使用Python,但我一直在想 – 在程序员的生产力方面,哪种语言更好? 在大多数语言之间的比较中,Python是显而易见的答案,因为你不必混淆内存pipe理和所有这些。 但是,对于Qt我不太确定。 它为C ++提供了足够的附加function(从我所知道的情况来看),大部分时间(不包括类定义和结构组件等附加function),一行Python代码大致等于一行C ++代码。 Qt为你做了几乎所有的内存pipe理,只要你坚持使用它的类,并且提供你可以在Python中find的漂亮容器的等价物。 我一直倾向于使用静态types的语言,但是由于各种各样的原因,我们也得到了Python的热潮。 但是,如果程序员的生产力与C ++相似,那么我可以跳出这种方式来获得其他好处 – 代码效率更高,用户安装的依赖性更less。 思考?
我想遍历列表中除前几个元素外的所有内容,例如: for line in lines[2:]: foo(line) 这是简洁的,但复制整个列表,这是不必要的。 我可以: del lines[0:2] for line in lines: foo(line) 但是这个修改列表,这并不总是好的。 我可以做这个: for i in xrange(2, len(lines)): line = lines[i] foo(line) 但是,这只是毛病。 更好的可能是这样的: for i,line in enumerate(lines): if i < 2: continue foo(line) 但这并不像第一个例子那么明显。 所以:做什么的方法与第一个例子一样明显,但不会不必要地复制列表?
python文档经常提到“容器”。 例如 : 如果check_circular是False(默认值:True),那么容器types的循环引用检查将被跳过,循环引用将导致OverflowError(或更糟糕)。 但我找不到任何官方的容器定义,既不是他们的名单。 编辑 对于Python 2.7.3: 检查了容器内置的types: ( isinstance(object, collections.Container)返回True ) 容器中定义了__contains__方法: 所有内置序列types:列表,字节码,string,Unicodestring和元组。 字典 所有内置的集合types:集合和frozensets 没有定义__contains__方法的容器: xrange对象 检查不是容器的内置types: ( isinstance(object, collections.Container)返回False ): Int对象 浮动对象 长物体 布尔对象 模块对象 文件对象 缓冲对象 无对象 告诉我你已经检查了哪些其他的内buildtypesisinstance(object, collections.Container) ,我将它们添加到列表中。
什么是使Pythonstring不可变的devise原因? 它如何使编程更容易? 我习惯了可变string,就像C中的那些字符一样。我应该如何编程而不使用可变string? 有没有最佳做法?
我试图在python中创buildmultithreading的Web服务器,但它只响应一个请求,我不知道为什么。 你能帮我吗? #!/usr/bin/env python2 # -*- coding: utf-8 -*- from SocketServer import ThreadingMixIn from BaseHTTPServer import HTTPServer from SimpleHTTPServer import SimpleHTTPRequestHandler from time import sleep class ThreadingServer(ThreadingMixIn, HTTPServer): pass class RequestHandler(SimpleHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header('Content-type', 'text/plain') sleep(5) response = 'Slept for 5 seconds..' self.send_header('Content-length', len(response)) self.end_headers() self.wfile.write(response) ThreadingServer(('', 8000), RequestHandler).serve_forever()
在python类中,@property是一个很好的装饰器,避免使用显式的setter和getter函数。 然而,它的开销是“古典”类function的2-5倍。 就我而言,在设置属性的情况下,这相当不错,与设置时需要完成的处理相比,开销不重要。 但是,在取得物业时我不需要处理。 它总是只是“返回self.property”。 有没有一个优雅的方式来使用setter,但不使用getter,而不需要使用不同的内部variables? 为了说明,下面的类具有属性“var”,它指的是内部variables“_var”。 调用“var”比“_var”需要更长的时间,但如果开发人员和用户都可以使用“var”而不必跟踪“_var”,那将会很好。 class MyClass(object): def __init__(self): self._var = None # the property "var". First the getter, then the setter @property def var(self): return self._var @var.setter def var(self, newValue): self._var = newValue #… and a lot of other stuff here # Use "var" a lot! How to avoid the overhead […]