我正在使用Doug Hellmann关于多处理的教程中的以下示例:
import multiprocessing
def worker():
"""worker function"""
print 'Worker'
return
if __name__ == '__main__':
jobs = []
for i in range(5):
p = multiprocessing.Process(target=worker)
jobs.append(p)
p.start()
Run Code Online (Sandbox Code Playgroud)
当我试图在if语句之外运行它时:
import multiprocessing
def worker():
"""worker function"""
print 'Worker'
return
jobs = []
for i in range(5):
p = multiprocessing.Process(target=worker)
jobs.append(p)
p.start()
Run Code Online (Sandbox Code Playgroud)
它开始不间断地产生进程,并且阻止它的唯一方法是重启!
为什么会这样?为什么它没有生成5个进程并退出?为什么我需要if语句?
我试图了解它是如何__add__工作的:
class MyNum:
def __init__(self,num):
self.num=num
def __add__(self,other):
return MyNum(self.num+other.num)
def __str__(self):
return str(self.num)
Run Code Online (Sandbox Code Playgroud)
如果我把它们放在一个清单中
d=[MyNum(i) for i in range(10)]
Run Code Online (Sandbox Code Playgroud)
这很有效
t=MyNum(0)
for n in d:
t=t+n
print t
Run Code Online (Sandbox Code Playgroud)
但这不是:
print sum(d)
TypeError: unsupported operand type(s) for +: 'int' and 'instance'
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我怎样才能得到sum()?
UPDATE
我的问题是如何在支持的对象列表上使用总和__add__,需要尽可能保持通用.
我有一个内容的csv文件:
"x","y","-z"
Run Code Online (Sandbox Code Playgroud)
当我导入它时,我得到:

我该如何绕过这种转换?
更新
如果你试试:
"x","y",="-z,a"
Run Code Online (Sandbox Code Playgroud)
",a"未导入.
如果你在前面放一个空格:
"x","y",=" -z"
Run Code Online (Sandbox Code Playgroud)
要么
"x","y"," -z"
Run Code Online (Sandbox Code Playgroud)
它会工作正常
我有一个numpy数组:
[[ 0. 1. 2. 3. 4.]
[ 7. 8. 9. 10. 4.]
[ 14. 15. 16. 17. 4.]
[ 1. 20. 21. 22. 23.]
[ 27. 28. 1. 20. 29.]]
Run Code Online (Sandbox Code Playgroud)
我想快速找到特定值的坐标并避免数组上的python循环.例如,数字4已打开:
row 0 and col 4
row 1 and col 4
row 2 and col 4
Run Code Online (Sandbox Code Playgroud)
并且搜索函数应该返回一个元组:
((0,4),(1,4),(2,4))
Run Code Online (Sandbox Code Playgroud)
这可以通过nunmpy的功能直接完成吗?
假设我正在读取包含3个逗号分隔数字的文件.该文件使用未知编码保存,到目前为止我正在处理ANSI和UTF-8.如果文件是UTF-8并且它有1行,值为115,113,12,那么:
with open(file) as f:
a,b,c=map(int,f.readline().split(','))
Run Code Online (Sandbox Code Playgroud)
会抛出这个:
invalid literal for int() with base 10: '\xef\xbb\xbf115'
Run Code Online (Sandbox Code Playgroud)
第一个数字总是被这些'\ xef\xbb\xbf'字符破坏.对于其余2个数字,转换工作正常.如果我用''手动替换'\ xef\xbb\xbf'然后进行int转换它将起作用.
对于任何类型的编码文件,有更好的方法吗?
在我的python项目中共享实用程序模块的最佳目录结构策略是什么?由于常用模块将使用新函数进行更新,我不希望将它们放在python安装目录中.
project1/
project2/
sharedUtils/
Run Code Online (Sandbox Code Playgroud)
从project1我不能使用"import ..\sharedUtils",还有其他方法吗?我宁愿不对"sharedUtils"位置进行硬编码
提前致谢
对于一组观察:
[a1,a2,a3,a4,a5]
Run Code Online (Sandbox Code Playgroud)
他们的成对距离
d=[[0,a12,a13,a14,a15]
[a21,0,a23,a24,a25]
[a31,a32,0,a34,a35]
[a41,a42,a43,0,a45]
[a51,a52,a53,a54,0]]
Run Code Online (Sandbox Code Playgroud)
以浓缩矩阵形式给出(上面的上三角形,由下式计算 scipy.spatial.distance.pdist):
c=[a12,a13,a14,a15,a23,a24,a25,a34,a35,a45]
Run Code Online (Sandbox Code Playgroud)
问题是,假设我在压缩矩阵中有索引,那么有一个函数(最好是在python中)f可以快速给出哪两个观察结果来计算它们?
f(c,0)=(1,2)
f(c,5)=(2,4)
f(c,9)=(4,5)
...
Run Code Online (Sandbox Code Playgroud)
我尝试了一些解决方案,但没有一个值得一提:(
我有一个n维点的集合,我想找到哪两个是最接近的.我可以为2个维度做的最好的是:
from numpy import *
myArr = array( [[1, 2],
[3, 4],
[5, 6],
[7, 8]] )
n = myArr.shape[0]
cross = [[sum( ( myArr[i] - myArr[j] ) ** 2 ), i, j]
for i in xrange( n )
for j in xrange( n )
if i != j
]
print min( cross )
Run Code Online (Sandbox Code Playgroud)
这使
[8, 0, 1]
Run Code Online (Sandbox Code Playgroud)
但这对于大型阵列来说太慢了.我可以应用什么样的优化?
有关:
我如何获得lambda函数的名称?
使用__name__属性返回<lambda>:
def myfunc():
pass
myfunc_l = lambda :None
print myfunc.__name__
print myfunc_l.__name__
>>myfunc
>><lambda>
Run Code Online (Sandbox Code Playgroud)
我在期待,myfunc_l但我得到了<lambda>
如何根据条件快速禁用类实例中的所有方法?我天真的解决方案是覆盖使用__getattr__但是当函数名称已经存在时不会调用它.
class my():
def method1(self):
print 'method1'
def method2(self):
print 'method2'
def __getattr__(self, name):
print 'Fetching '+str(name)
if self.isValid():
return getattr(self, name)
def isValid(self):
return False
if __name__ == '__main__':
m=my()
m.method1()
Run Code Online (Sandbox Code Playgroud) 我用pydev(2.0.0.2011040403)重新安装了Eclipse,但调试和运行菜单中缺少带有"coverage"的运行配置.我确定那个选项曾经存在,我怎样才能让它再次出现?

我不是unicode专家,我读过类似的帖子,没有任何决定性的解决方案.我需要一个片段来读取一些带有希腊字符的文件.我的文件有像这样的名字
20.10.2011 ???????? ????????- ????????? 2011.xls
我有一个生成文件名的生成器函数:
# -*- coding:utf-8 -*-
import os
import glob
def filesInDir(directory, mask='*.*'):
for root, dir, files in os.walk(directory):
for file in glob.glob(os.path.join(root, mask)):
yield file
Run Code Online (Sandbox Code Playgroud)
打电话给:
for file in filesInDir(directory=r'.'):
with open(file,'r') as f:
print f
Run Code Online (Sandbox Code Playgroud)
给
IOError: [Errno 22] invalid mode ('r') or filename: '.\\20.10.2011 ?s?????? ?????\xb5??- ?????st?? 2011.xls'
Run Code Online (Sandbox Code Playgroud)
如何使用这些文件名创建有效的文件对象?
我想将时间序列和直方图组合在一起,如下例所示:

我只是希望一个没有失真的缩放,并在第二个内部自由放置,但我还没有找到一个为此剪断的代码.
该图是从这里获得的,但它涉及合并2个svg图.这可以直接完成matplotlib吗?