2014-04-11 3 views
-1

먼저, 나는 '리터럴'에 할당 할 수 없다는 것을 알고 싶습니다. = 15리스트/튜플 등에서 문자열 변수를 가져 와서 다른 변수의 변수 이름으로 사용하는 방법이 있습니까?

1 "단어"= 5

하지만 입력 할 수

워드 = 5

난으로 myList = "워드"를 만든 경우, "black", "dance", "bread"]

mylist [0]이 변수라는 것을 완전히 이해하고 있습니다. 모자,하지만 내 감지를 도망쳐 온 멋진 파이썬 방법은 없습니다. 예를 들어

MyList = ["word", "black","dance", "bread"] 
OtherList = [ OtherClass(), 1, "Much Brave", "Such Awesome"] 
for i in MyList: 
    i.supersweetliteralmethodthatIvewantedsincethedaysofQBasic() = OtherList[i] 

소년이 꿈꿀 수 있습니다. 수행 할 것

+3

http://stupidpythonideas.blogspot.com/2013/05/why-you-dont-want-to-dynamically-create.html 이것이 왜 처음에는 어리석은 아이디어인지, * 성취하려고 노력해야합니다. – jwodder

답변

2

(나는 그것을 권하고 싶지 않다, 이것은 아주 나쁜 사례로 간주되고 있습니다) : 현재 범위에 대한 것

locals().update(dict(zip(MyList, OtherList))) 

는, 글로벌 과제에 대한 globals()를 사용합니다.

+0

위의 표를 취소 한 사람에게 지금 고칠 수 있습니다. :) –

+0

변경할 수있는 개체를 가리키고있을 때이 변수가 "다른 변수에 대한 변수"로만 지정된다는 점에 유의할 가치가 있습니다. 숫자와 얼룩에 대해서는 실제로 값의 복사본을 얻을 것입니다 ... 다른 단어에서'word '를 조작하면'OtherList [MyList.index ('word ')]' – underrun

+0

@underrun을 조작 할 수 없습니다. 그러나 나는 그것을 할 수있는 완벽한 방법이 있다고 생각하지 않습니다. 나도 그처럼 모호한 코드를 게시하는 것을 부끄러워합니다. : D –

1

당신은 아마 범위의 변수에 넣어 싶지 않아하지만 당신은 개체의 속성을 만들 수 :

class namespace(object): pass 
ns = namespace() 
ns.__dict__.update(dict(zip(MyList, OtherList))) 
ns.word == OtherList[0] # True 

또는 아마도 당신은 루프를 사용하려는 경우

class namespace(object): pass 
ns = namespace() 
for k, v in zip(MyList, OtherList): 
    ns.__dict__[k] = v 

ns.word == OtherList[0] # True 
관련 문제