小编Hon*_*Zhu的帖子

如何在python shell中重新加载一个类?

如果我导入定义属于某个包的同名类的模块,则由于父包的__init__.py而导致它作为Class而不是Module导入.有关详细信息,请参阅不同目录的不同导入结 在Python shell或ipython shell中,如果我这样做

from MyPak import MyMod

MyModule总是作为Class导入,因此我无法重新加载它(reload()仅适用于模块).跑

from MyPak import MyMod

再似乎没有更新类定义.任何人都可以建议一种方法来更新python shell中的类?

PS.无需重新启动python解释器.

pps.万一你手头有代码并想测试它:我实际上是在谈论BioPython,我正在研究Bio.PDB.PDBParser.我有一个ipython shell(v0.10)并编辑PDBParser.py.只是无法在ipython中重新加载它.

所以这就是我所做的:

# start ipython v0.10
import Bio
from Bio.PDB import PDBParser
p = PDBParser()
s = p.get_structure()
# then I make changes,e.g. simply print some text, in PDBParser.py
del Bio
del PDBParser
del s
import Bio  # or reload(Bio) without deleting all the objects
from Bio.PDB import PDBParser
p = PDBParser()
s = p.get_structure() # expected output after change not …
Run Code Online (Sandbox Code Playgroud)

python ipython

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

sys.modules和globals()中的模块名称

如果我导入模块,模块名称将同时显示在sys.modulesglobals().如果我再次删除它,它将被删除globals(),但仍然驻留在sys.modules.为什么会这样?

import mymodule
'mymodule' in globals()   # True
'mymodule' in sys.modules # True
del mymodule
'mymodule' in globals()   # False
'mymodule' in sys.modules # Still True, why?
Run Code Online (Sandbox Code Playgroud)

我还发现了以下不同之处:

from mypackage import mymodule
'mypackage' in sys.modules            # True
'mymodule'  in sys.modules            # False !
'mypackage.mymodule' in sys.modules   # also True !
Run Code Online (Sandbox Code Playgroud)

而答案是互补的globals():

'mypackage' in sys.modules            # False
'mymodule'  in sys.modules            # True 
'mypackage.mymodule' in sys.modules   # False
Run Code Online (Sandbox Code Playgroud)

python

9
推荐指数
1
解决办法
5205
查看次数

使用python多处理模块中的Manager()共享数据

我在使用multiprocessing模块时试图共享数据(python 2.7,Linux),当使用稍微不同的代码时我得到了不同的结果:

import os
import time
from multiprocessing import Process, Manager

def editDict(d):
    d[1] = 10
    d[2] = 20
    d[3] = 30


pnum = 3
m = Manager()
Run Code Online (Sandbox Code Playgroud)

第一版:

mlist = m.list()
for i in xrange(pnum):
    mdict = m.dict()
    mlist.append(mdict)
    p = Process(target=editDict,args=(mdict,))
    p.start()

time.sleep(2)
print 'after process finished', mlist
Run Code Online (Sandbox Code Playgroud)

这会产生:

过程结束后[{1:10,2:20,3:30},{1:10,2:20,3:30},{1:10,2:20,3:30}]

第2版​​:

mlist = m.list([m.dict() for i in xrange(pnum)]) # main difference to 1st version
for i in xrange(pnum):
    p = Process(target=editDict,args=(mlist[i],))
    p.start()
time.sleep(2)
print 'after process …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

8
推荐指数
1
解决办法
2902
查看次数

我无法将 app-debug.apk 安装到我的手机中

我使用cordova version@6JDK 1.8或更高版本,但仍然可以在我的 Android 手机上运行应用程序

我尝试run ionic Cordova run android 等尝试删除并重新安装离子 Cordova 平台 android

BUILD SUCCESSFUL

Total time: 1 mins 18.416 secs
Built the following apk(s):
        E:/Aproject/Project file/thenationaltv app/mynationaltv/platforms/android/build/outputs/apk/android-debug.apk
> native-run.cmd android --app platforms\android\app\build\outputs\apk\debug\app-debug.apk
No hardare devices found, attempting emulator...
Selected emulator HKE839LB
Error: ENOENT: no such file or directory, open 'E:\Aproject\Project file\thenationaltv app\mynationaltv\platforms\android\app\build\outputs\apk\debug\app-debug.apk'
[ERROR] An error occurred while running subprocess native-run.

        native-run.cmd android --app platforms\android\app\build\outputs\apk\debug\app-d... exited with exit code 1.

        Re-running this command with …
Run Code Online (Sandbox Code Playgroud)

adb cordova ionic-framework

4
推荐指数
1
解决办法
6396
查看次数

根据输入返回不同的输出组合

在我的功能,我有一个列表params_to_opt,可以包括任何以下项:'a','b','c','d','e'.

示例:params_to_opt=['c', 'e', 'a'].它可以包含我指定的任何数量(1到5)的条目.它始终包含至少一个上述条目.

根据此输入,我做了各种计算:

def MyFunction(params_to_opt):
    if 'a' in params_to_opt:
        out1 = ...
    if 'b' in params_to_opt:
        out2= ...
    if 'c' in params_to_opt:
        out3 = ...
    if 'd' in params_to_opt:
        out4= ...
    if 'e' in params_to_opt:
        out5 = ...
Run Code Online (Sandbox Code Playgroud)

现在我想只返回计算出的值.例如,如果params_to_opt=['c', 'e', 'a'],我会回来out1,out3out5.

问题是,如果我再次使用if .. else语句,我将不得不考虑31个可能的输出(5 + 10 + 10 + 5 + 1,具体取决于我的列表长度).

有没有办法更优雅地编码?我不关心性能,因为与每个out1,out2,out3,out4,out5的计算时间相比,输出的数量非常小.

谢谢,米哈伊尔

python algorithm function

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