我正在尝试在多个进程上调用一个函数.显而易见的解决方案是python的multiprocessing模块.问题是该功能有副作用.它创建一个临时文件,并使用atexit.register和全局列表注册要在退出时删除的文件.以下内容应说明问题(在不同的上下文中).
import multiprocessing as multi
glob_data=[]
def func(a):
    glob_data.append(a)
map(func,range(10))
print glob_data  #[0,1,2,3,4 ... , 9]  Good.
p=multi.Pool(processes=8)
p.map(func,range(80))
print glob_data  #[0,1,2,3,4, ... , 9] Bad, glob_data wasn't updated.
有没有办法更新全球数据?
请注意,如果您尝试上面的脚本,您可能不应该从交互式解释器尝试它,因为multiprocessing要求模块__main__可以由子进程导入.
UPDATE
global在func中添加关键字没有帮助 - 例如:
def func(a):  #Still doesn't work.
    global glob_data
    glob_data.append(a)
我通常使用没有任何类型的块/多行注释的语言编程(例如python[ #]和fortran[ c或!].).有没有办法在emacs中定义一个允许我输入多行注释的次要模式?我的意思是,它会导致emacs在X行(比如72)之后自动换行文本并自动将注释字符(从当前主要模式中取出)添加到每行的开头?
对不起,如果这是一个非常基本的问题 - 我的elisp技能充其量是最基本的.
早些时候,我试图回答一个问题,我希望尽可能有效地迭代列表切片.
for x in lst[idx1:]:
是不理想的,因为它创建一个副本(通常,这是O(n)).我的下一个想法是使用itertools.islice.但是,如果你看一下文档,它似乎islice会调用,next直到它找到它正在寻找的索引,它将开始产生值.这也是O(n).如果传递给的对象islice是a list或a tuple似乎可以在这里进行优化- 看起来你可以直接迭代"切片"(在C中)而不实际制作副本.我很好奇这个优化是否在源头,但我没有找到任何东西.我对C和python源代码树并不是很熟悉,所以我完全有可能错过了它.
我的问题是:
有没有办法迭代列表"切片"而不制作列表切片的副本,而不烧掉一堆不需要的元素(在优化的C实现中)?
我很清楚我可以为此编写自己的生成器(非常天真,不考虑许多参数应该是可选的,等等):
def myslice(obj,start,stop,stride):
    for i in xrange(start,stop,stride):
        yield obj[i]
但这肯定不会超过优化的C实现.
如果你想知道为什么我需要这个直接在一个切片上循环,请考虑以下两者之间的区别:
takewhile(lambda x: x == 5, lst[idx:])  #copy's the tail of the list unnecessarily
和
takewhile(lambda x: x == 5, islice(lst,idx,None)) #inspects the head of the list unnecessarily 
最后:
takewhile(lambda x: x == 5, magic_slice(lst,idx,None)) #How to create magic_slice???
我正在尝试解压缩.xz文件,其中包含一些foders和文件.我没有看到使用lzma模块执行此操作的直接方法.这就是我所看到的解压缩方法:
In [1]: import lzma
In [2]: f = lzma.decompress("test.tar.xz")
---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-2-3b08bf488f9d> in <module>()
----> 1 f = lzma.decompress("test.tar.xz")
error: unknown file format
是否还有其他方法可以解压缩此文件,以便创建生成的文件夹?
我正在阅读一些基本上看起来像这样的代码:
class Foo(object):
    class_name = __module__.replace('_', '-')
对我来说,这看起来很奇怪(__module__那是什么?)所以我去了看python 数据模型.快速搜索显示这__module__是类对象和函数对象的属性.但是,__module__全局命名空间中没有可用的东西(只需要通过查看它并观察NameError结果就可以轻松验证...).
我决定将其用于实现特定的行为,但作为最后的检查,我决定使用其他实现进行测试.事实证明,此代码以1执行
我的问题是这种行为是否实际上是在语言参考中的任何地方定义的.我不确定我为什么__module__要这样做,但是我可以安全地依赖于类创建命名空间,还是所有实现者都决定以同样的方式执行此操作?
1所有linux,但我怀疑这很重要......
我在Objective C上使用一个结构来存储一些数据,如下所示:
@interface Interface : NSObject
{
    // my Data
    struct Data
    {
        __unsafe_unretained BOOL isInit;
        __unsafe_unretained BOOL isRegister;
        __unsafe_unretained NSString* myValue;
       // Data() : isInit(false), isRegister(false), myValue(@"mYv4lue") {} // Constructor doesnt work
    };
    struct Data myData;  // Create Struct
}
但是我无法使用构造函数进行编译.我希望在创建Struct时值会采用一些默认值.
我怎样才能做到这一点?
有人知道如何在gnuplot中插入字体较小的字幕吗?
目前,我创建字幕的方式是\n在标题中使用.另外,我希望副标题有一个较小的字体大小.
提前致谢.
我有一个浮点数的一维数组A,其中大部分是好的,但缺少一些值.丢失的数据被替换为nan(不是数字).我必须通过线性插值从附近的好值中替换数组中的缺失值.所以,例如:
F7(np.array([10.,20.,nan,40.,50.,nan,30.])) 
应该回来
np.array([10.,20.,30.,40.,50.,40.,30.]). 
使用Python做到这一点最好的方法是什么?
任何帮助将非常感激
谢谢
在我之前的问题中,我学会了调整子类的大小ndarray.整齐.不幸的是,当我尝试调整大小的数组是计算的结果时,它不再有效:
import numpy as np
class Foo(np.ndarray):
    def __new__(cls,shape,dtype=np.float32,buffer=None,offset=0,
                strides=None,order=None):
        return np.ndarray.__new__(cls,shape,dtype,buffer,offset,strides,order)
    def __array_prepare__(self,output,context):
        print output.flags['OWNDATA'],"PREPARE",type(output)
        return np.ndarray.__array_prepare__(self,output,context)
    def __array_wrap__(self,output,context=None):
        print output.flags['OWNDATA'],"WRAP",type(output)
        return np.ndarray.__array_wrap__(self,output,context)
a = Foo((32,))
#resizing a is no problem
a.resize((24,),refcheck=False)
b = Foo((32,))
c = Foo((32,))
d = b+c
#Cannot resize `d`
d.resize((24,),refcheck=False)
确切的输出(包括追溯)是:
True PREPARE <type 'numpy.ndarray'>
False WRAP <class '__main__.Foo'>
Traceback (most recent call last):
  File "test.py", line 26, in <module>
    d.resize((24,),refcheck=False)
ValueError: cannot resize this array: it does not own …我今天注意到以下工作使用python 2.6(Cpython)...
>>> a=[100,200]
>>> a[True]
200
>>> a[False]
100
这是否可以移植到其他python实现(例如True/ False保证从int继承?True保证评估为1而不是其他一些非零数字?)是否有任何情况会有用?它似乎可以用作三元运算符的另一种形式,但我不知道那里获得了多少......