2017-08-22 38 views
0

我想下面的代碼短得到重視與地圖或其他方式varible使代碼更短

vm1=VMFactory('qemu',qemu_cmd=qemu_cmd1) 
    vm2=VMFactory('qemu',qemu_cmd=qemu_cmd2) 
    vm3=VMFactory('qemu',qemu_cmd=qemu_cmd3) 
    vm4=VMFactory('qemu',qemu_cmd=qemu_cmd4) 
    vm5=VMFactory('qemu',qemu_cmd=qemu_cmd5) 
    vm6=VMFactory('qemu',qemu_cmd=qemu_cmd6) 

,所以我嘗試下面的代碼,但它不工作

local_var=locals() 
vm1,vm2,vm3,vm4,vm5,vm6=map(lambda x: VMFactory('qemu',qemu_cmd=local_var['qemu_cmd{}'.format(x)]),range(1,6)) 

錯誤ValueError異常:需要比5點的值更解壓

+3

爲什麼不'虛擬機= [VmFactory( 'QEMU',qemu_cmd = F )for f in(qemu_cmd1,qemucmd2,...)]'? –

回答

0

您需要範圍內7

list(range(1,7)) 

通過docs range它是迭代,直到<最大

如果qmu_cmd1,qemu_cmd2,是一個變量,由喬恩·克萊門茨更好的辦法

cmds = (qemu_cmd1, qemu_cmd2, qemu_cmd3, qemu_cmd4, qemu_cmd5, qemu_cmd6) 
[VmFactory('qemu', qemu_cmd=f) for f in cmds] 
+0

謝謝,它適用於我,有沒有更好的方法來做到這一點,我想避免使用locals()函數。所以如何將字符串更改爲變量 – user1334609

+0

不,qmu_cmd1,qemu_cmd2,是一個變量而不是字符串,Jon Clemets是正確的 – user1334609

+0

它更可讀,Jon Clements解決方案 –