小编Tho*_*fin的帖子

python列表连接效率

连接两个列表的最有效方法是什么list_a,list_b何时:

  • list_b物品必须放在list_a物品之前
  • 结果必须放在 list_a

我有四种可能性:

# 1
list_a = list_b + list_a

# 2
for item in list_b:
    list_a.insert(0, item)

# 3
for item in self.list_a:
    list_b.append(item)
list_a = list_b

# 4
list_a[0:0] = list_b
Run Code Online (Sandbox Code Playgroud)

谢谢!

python list

16
推荐指数
5
解决办法
1万
查看次数

Python:获取Windows操作系统版本和体系结构

首先,我不认为这个问题
与Python中检测64位操作系统(Windows)重复,
因为它还没有得到彻底的回答.

唯一接近的答案是:

使用sys.getwindowsversion()或存在PROGRAMFILES(X86)(if 'PROGRAMFILES(X86)' in os.environ)

但:

  • Windows环境变量PROGRAMFILES(X86)可靠吗?我担心任何人都可以创建它,即使系统中没有它.
  • 如何使用sys.getwindowsversion()才能获得架构?

关于sys.getwindowsversion():
链接http://docs.python.org/library/sys.html#sys.getwindowsversion
将我们引导至http://msdn.microsoft.com/en-us/library/ms724451%28VS.85%29. aspx
但我没有看到任何与架构相关的东西(32位/ 64位).
此外,返回元组中的平台元素似乎独立于体系结构.

最后一点:我正在寻找一个使用python 2.5和从Windows XP开始的Windows版本的解决方案

谢谢!

编辑:
相关信息可以在
http://msdn.microsoft.com/en-us/library/ms724340%28v=VS.85%29.aspx
获得,但我怎么能用python得到这个?

Edit2:在64位窗口上,带有32位python解释器:

  • os.environ ["PROCESSOR_ARCHITECTURE"]返回
    • "86"
  • platform.architecture()返回
    • ('32位','WindowsPE')

python windows cpu-architecture

6
推荐指数
2
解决办法
3万
查看次数

打印物体和unicode,引擎盖下有什么?有什么好的指导方针?

我正在努力进行打印和unicode转换.这是在2.5 windows解释器中执行的一些代码.

>>> import sys
>>> print sys.stdout.encoding
cp850
>>> print u"é"
é
>>> print u"é".encode("cp850")
é
>>> print u"é".encode("utf8")
?®
>>> print u"é".__repr__()
u'\xe9'

>>> class A():
...    def __unicode__(self):
...       return u"é"
...
>>> print A()
<__main__.A instance at 0x0000000002AEEA88>

>>> class B():
...    def __repr__(self):
...       return u"é".encode("cp850")
...
>>> print B()
é

>>> class C():
...    def __repr__(self):
...       return u"é".encode("utf8")
...
>>> print C()
?®

>>> class D():
...    def __str__(self):
...       return u"é"
... …
Run Code Online (Sandbox Code Playgroud)

python printing unicode stdout

6
推荐指数
1
解决办法
2831
查看次数

使用python装饰器进行代码重构?

我实际上正在努力处理一些代码.我知道它可以重构,但我找不到漂亮的智能优雅的解决方案.

这里有两个函数(我的代码中有更多类似的函数):

def fooA(param1, param2):
    if param2 == True:
       code_chunk_1

    fooA_code  #uses only param1

    if param2 == True:
       code_chunk_2


def fooB(param1, param2):
    if param2 == True:
       code_chunk_1

    fooB_code  #uses only param1

    if param2 == True:
       code_chunk_2
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是使用这个装饰器:

def refactorMe(func):
    def wrapper(*args):
        if args[-1]:
            code_chunk_1

        func(*args)

        if args[-1]:
            code_chunk_2

    return wrapper
Run Code Online (Sandbox Code Playgroud)

最后:

@refactorMe
def fooA(param1, param2):
    fooA_code  #uses only param1

@refactorMe
def fooB(param1, param2):
    fooB_code  #uses only param1
Run Code Online (Sandbox Code Playgroud)

不幸的是,我对这个解决方案不满意:

  • 这个装饰器是"侵入式"的,并且特定于fooA和fooB功能
  • param2不再在fooA和fooB体中使用,但我们必须将它保留在函数签名中

也许我没有将装饰器用于其最初目的?

有没有其他方法来重构代码?

非常感谢!

python refactoring decorator

4
推荐指数
2
解决办法
750
查看次数