【发布时间】:2017-09-18 21:47:28
【问题描述】:
我创建了一个函数,它可以接受一个参数,该参数定义另一个调用来操作列表。例如,如果我直接调用sliprotor(Rotorid1, 1),那么Rotorid1 列表就会按照我的意愿进行操作。函数如下:
def sliprotor(rotorid,offset_qty):
for movers in range(26,0,-1):
rotorid[movers-1+offset_qty]=rotorid[movers-1]
for movers_refill in range(offset_qty):
rotorid[movers_refill]=rotorid[movers_refill+26]
但是,如果我尝试通过构建列表名称然后执行它来“间接”调用它,则“rotorid”不会像直接调用时那样转换为值。
我这样做的方式是
def set_curr_rotor(XX):
rotorid = "Rotorid"+str(XX)
return rotorid
rid1 = input("First rotor slip : ")
if(rid1):
sliprotor(set_curr_rotor(rid1),1)
所以“间接”调用不会将 set_curr_rotor 函数创建的值传递给 sliprotor 函数。直接调用确实使用传入的值。
如果我查看调试,您可以看到它直接调用rotorid[] 作为列表,而不是Rotorid1 或其他Rotoridx,因此我得到一个索引错误。
.... 文件“”,第 3 行,在sliprotor 中 rotorid[movers-1+offset_qty]=rotorid[movers-1] IndexError: 字符串索引超出范围
我可以重组我拥有代码的方式,但我不希望这样做。我缺少一些方法/范围问题吗?这只是 Python 的内在属性吗?我对 Python 很陌生,所以我只是在做一个模拟 Enigma 机器的练习。
任何帮助表示赞赏。 埃德
【问题讨论】:
-
不要这样做。这是糟糕的设计。请改用容器。
-
从根本上说,不要将字符串对象与变量名混为一谈。你可以使用各种巫术来做到这一点,但同样,这是非常非常糟糕的做法。
-
将您的列表保存在字典中。然后你可以将键作为字符串来访问字典中的列表。
-
我将研究使用列表字典。谢谢
标签: python list function substitution