我最近比较了处理速度[]和,list()并且惊讶地发现它的[]运行速度比它快三倍list().我跑了相同的测试与{}和dict(),结果几乎相同:[]和{}两个花了大约0.128sec /百万次,而list()和dict()大约花费每个0.428sec /万次.
为什么是这样?不要[]和{}(可能()和'',太)立即传回文字的一些空股票的份,而其明确命名同行(list(),dict(),tuple(),str())完全去创建一个对象,他们是否真的有元素?
我不知道这两种方法有何不同,但我很想知道.我无法在文档中或在SO上找到答案,搜索空括号结果比我预期的问题更多.
我拨打了我的时序结果timeit.timeit("[]")和timeit.timeit("list()"),和timeit.timeit("{}")和timeit.timeit("dict()"),分别比较列表和字典.我正在运行Python 2.7.9.
我最近发现的" 为什么是,如果真慢于如果为1? "来比较的性能if True来if 1,似乎触及了类似的文字,对全局的情况; 也许值得考虑一下.
我见过几个像这样的代码示例:
if not someobj:
#do something
Run Code Online (Sandbox Code Playgroud)
但我想知道为什么不这样做:
if someobj == None:
#do something
Run Code Online (Sandbox Code Playgroud)
有什么区别吗?一个人比另一个人有优势吗?
在Python 2中,我们可以重新分配True和False(但不包括None),但所有这三个(True,False,和None)被认为是内置变量.然而,在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包装它们就像在python2中?