Python - 在for语句中使用字符串?

aes*_*ipt 1 python string expression for-loop

所以我知道这是一个解决方法,而且这可能是一个更好的方法,但这是交易.我已经简化了代码,从那里收集这些信息,并给出了坚实的价值.

curSel = nuke.selectedNodes()
knobToChange = "label"
codeIn = "[value in]"

kcPrefix = "x"
kcStart = "['"
kcEnd = "']"

changerString = kcPrefix+kcStart+knobToChange+kcEnd


for x in curSel:
    changerString.setValue(codeIn)
Run Code Online (Sandbox Code Playgroud)

但我得到错误,我想我会 - 这是一个字符串没有属性"setValue"

它因为我只是输入x ['label']而不是changerString,它可以工作,但即使更换器字符串说完全相同的东西,它被读作字符串而不是代码.

有任何想法吗?

mgi*_*son 5

看起来你正在寻找基于当前命名空间将字符串计算为python对象的东西.一种方法是使用globals字典:

globals()['x']['label'].setValue(...)
Run Code Online (Sandbox Code Playgroud)

换句话说,globals()['x']['label']就是一样的东西x['label'].

或者明确说明你的情况:

globals()[kcPrefix][knobToChange].setValue(codeIn)
Run Code Online (Sandbox Code Playgroud)

其他人可能建议eval:

eval('x["label"]').setValue(...)  #insecure and inefficient
Run Code Online (Sandbox Code Playgroud)

但这globals绝对是一个更好的主意.


最后,通常当你想做这样的事情时,你最好先使用字典或其他类型的数据结构来保持数据更有条理