请考虑以下示例:
i=7
j=8
k=10
def test():
i=1
j=2
k=3
return dict((name,eval(name)) for name in ['i','j','k'])
Run Code Online (Sandbox Code Playgroud)
它返回:
>>> test()
{'i': 7, 'k': 10, 'j': 8}
Run Code Online (Sandbox Code Playgroud)
为什么eval不考虑函数内定义的变量?从文档中,您可以选择传递全局变量和本地字典.这意味着什么?最后,我如何修改这个小案例才能使它工作?
我是新来的virtualenv.我想安装需要的spyder PyQt4,这需要SIP.
pip不起作用,所以我下载了SIP,我做了以下命令:
python configure.py
make
make install
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误:
make[1]: entrant dans le répertoire « /stck2/stck2.2/ptoniato/python/pip/virtualenv-1.10.1/provaenv/build/SIP/sipgen »
cp -f sip /stck2/stck2.2/ptoniato/python/pip/virtualenv-1.10.1/provaenv/bin/sip
make[1]: quittant le répertoire « /stck2/stck2.2/ptoniato/python/pip/virtualenv-1.10.1/provaenv/build/SIP/sipgen »
make[1]: entrant dans le répertoire « /stck2/stck2.2/ptoniato/python/pip/virtualenv-1.10.1/provaenv/build/SIP/siplib »
cp -f sip.so /stck2/stck2.2/ptoniato/python/pip/virtualenv-1.10.1/provaenv/lib/python2.7/site-packages/sip.so
strip /stck2/stck2.2/ptoniato/python/pip/virtualenv-1.10.1/provaenv/lib/python2.7/site-packages/sip.so
cp -f /stck2/stck2.2/ptoniato/python/pip/virtualenv-1.10.1/provaenv/build/SIP/siplib/sip.h /usr/local/python/include/python2.7/sip.h
cp: impossible de supprimer « /usr/local/python/include/python2.7/sip.h »: Permission non accordée
make[1]: *** [install] Erreur 1
make[1]: quittant le répertoire « /stck2/stck2.2/ptoniato/python/pip/virtualenv-1.10.1/provaenv/build/SIP/siplib »
make: *** [install] Erreur …Run Code Online (Sandbox Code Playgroud) 我正在处理一些ascii-data,进行一些操作,然后将所有内容写回另一个文件(完成的工作post_processing_0.main,不返回任何内容).我想将代码与多处理模块并行化,请参阅以下代码片段:
from multiprocessing import Pool
import post_processing_0
def chunks(lst,n):
return [ lst[i::n] for i in xrange(n) ]
def main():
pool = Pool(processes=proc_num)
P={}
for i in range(0,proc_num):
P['process_'+str(i)]=pool.apply_async(post_processing_0.main, [split_list[i]])
pool.close()
pool.join()
proc_num=8
timesteps=100
list_to_do=range(0,timesteps)
split_list=chunks(list_to_do,proc_num)
main()
Run Code Online (Sandbox Code Playgroud)
我读了地图和异步之间的区别,但我不太了解它.我的多处理模块的应用是否正确?
在这种情况下,我应该使用map_async还是apply_async?为什么?
编辑:
我不认为这是Python multiprocessing.Pool问题的重复:何时使用apply,apply_async或map?.在问题中,答案集中在使用这两个函数可以获得的结果的顺序.我在这里问:没有任何东西返回时有什么区别?
我想在python中导入一些ascii文件(来自tecplot,用于cfd后期处理的软件).这些文件的规则是(至少,我需要导入的那些):
每个部分都有两行作为标题:
VARIABLES = "x" "y" "z" "ro" "rovx" "rovy" "rovz" "roE" "M" "p" "Pi" "tsta" "tgen"
ZONE T="Window(s) : E_W_Block0002_ALL", I=29, J=17, K=25, F=BLOCK
Run Code Online (Sandbox Code Playgroud)
以下是数据示例:
VARIABLES = "x" "y" "z" "ro" "rovx" "rovy" "rovz" "roE" "M" "p" "Pi" "tsta" "tgen"
ZONE T="Window(s) : E_W_Block0002_ALL", I=29, J=17, K=25, F=BLOCK
-3.9999999E+00 -3.3327306E+00 -2.7760824E+00 -2.3117116E+00 -1.9243209E+00 -1.6011492E+00
[...]
0.0000000E+00 #fin first variable
-4.3532482E-02 -4.3584235E-02 -4.3627592E-02 -4.3663762E-02 -4.3693815E-02 -4.3718831E-02 #second variable, 'y'
[...]
1.0738781E-01 …Run Code Online (Sandbox Code Playgroud) 我很喜欢使用pathlib在蟒蛇路径管理,但采用这种封装的缺点是很多的命令,像shutil.copy,.move,内建open需要一个字符串,而不是一个PosixPath对象,从而为错误
TypeError: coercing to Unicode: need string or buffer, PosixPath found
Run Code Online (Sandbox Code Playgroud)
逻辑解决方案当然是使用str().
我的问题是如何修改pathlib对象,以便调用open(pathlib.PosixPath)就可以在不使用的情况下工作str().
我怎样才能更快地完成这个功能?(我称之为很多时间,可能会提高速度)
def vectorr(I, J, K):
vect = []
for k in range(0, K):
for j in range(0, J):
for i in range(0, I):
vect.append([i, j, k])
return vect
Run Code Online (Sandbox Code Playgroud) 我如何修改下面的类以使它们可以成像?
这个问题:如何使一个具有__getattr__正确可选择的类?类似但在使用getattr时引用了错误的异常.
这个问题似乎提供了有意义的见解为什么pickle.dumps会调用__getattr__?,但它没有提供一个例子,我真的无法理解我想要实现的内容.
import pickle
class Foo(object):
def __init__(self, dct):
for key in dct:
setattr(self, key, dct[key])
class Bar(object):
def __init__(self, dct):
for key in dct:
setattr(self, key, dct[key])
def __getattr__(self, attr):
"""If attr is not in channel, look in timing_data
"""
return getattr(self.foo, attr)
if __name__=='__main__':
dct={'a':1,'b':2,'c':3}
foo=Foo(dct)
dct2={'d':1,'e':2,'f':3,'foo':foo}
bar=Bar(dct2)
pickle.dump(bar,open('test.pkl','w'))
bar=pickle.load(open('test.pkl','r'))
Run Code Online (Sandbox Code Playgroud)
结果:
14 """If attr is not in channel, look in timing_data
15 """
---> 16 return getattr(self.foo, attr)
17
18 if …Run Code Online (Sandbox Code Playgroud) 让我们考虑一个大整数列表,例如:
def primesfrom2to(n):
# http://stackoverflow.com/questions/2068372/fastest-way-to-list-all-primes-below-n-in-python/3035188#3035188
""" Input n>=6, Returns a array of primes, 2 <= p < n """
sieve = np.ones(n/3 + (n%6==2), dtype=np.bool)
sieve[0] = False
for i in xrange(int(n**0.5)/3+1):
if sieve[i]:
k=3*i+1|1
sieve[ ((k*k)/3) ::2*k] = False
sieve[(k*k+4*k-2*k*(i&1))/3::2*k] = False
return np.r_[2,3,((3*np.nonzero(sieve)[0]+1)|1)]
primesfrom2to(2000000)
Run Code Online (Sandbox Code Playgroud)
我想计算其总和,预期结果是142913828922.但如果我这样做:
sum(primesfrom2to(2000000))
Run Code Online (Sandbox Code Playgroud)
我得到1179908154,这显然是错的.问题是我有一个int溢出,但我不明白为什么.让我解释一下.考虑这个测试代码:
a=primesfrom2to(2000000)
b=[float(i) for i in a]
c=[long(i) for i in a]
sumI=0
sumF=0
sumL=0
m=0
for i,j,k in zip(a,b,c):
m=m+1
sumI=sumI+i
sumF=sumF+j
sumL=sumL+k
print sumI,sumF,sumL
if sumI<0:
print i,m
break
Run Code Online (Sandbox Code Playgroud)
我发现第一个整数溢出发生在[i …