2016-12-21 1 views
0

곱셈 된 배열을 만들고 그 위에 뭔가를 추가하려고하지만 사용자가 추가 할 배열을 선택해야합니다. 그래서 Python - 이름이 문자열로 주어진 배열에 추가

가 무슨 뜻인지 명확히 : (. 코드는 아래에서 잘못된 것입니다,하지만 난 그것을 쓸 수있는 방법을 모른다)

x = [] 
y = [] 

def test(pName): 
    %s.append(1) %pName 

test(y) 

편집 :

@Jim Fasarakis - 힐리

저는 PyGame에서 프로그램하려고합니다. 그 때문에 나는 사용하고 싶은 모든 이미지를 초기화해야합니다.

확장하지 않으려면 원하는 배열에 쉽게 추가 할 수있는 기능을 만들고 싶었 기 때문에 새로운 사진을 생성 할 때마다 새 기능을 만들 필요가 없습니다.

내 코드는 다음과 기압 :

def loadImages(self,pName,pAnz,pScaleX,pScaleY): 
    for i in range(0,pAnz): 
     tux = pygame.transform.scale(pygame.image.load('./images/%s.png'),(pScaleX,pScaleY) % pName) 
     self.%s.append(tux) %pName 
    length_array = len(self.%s) %pName 
    return length_array 
+3

흠, 왜 사전을 사용하지 않습니까? – danielfranca

+0

사진이나 개체를 저장해야하기 때문에 모든 것을 배열에 저장하는 것이 중요합니다. – freedome97

+0

@ freedome97 배열에 저장할 수있는 사전에 모든 것을 저장할 수 있습니다.) –

답변

1

, 당신은 사전을 사용할 수 있습니다 클리너 쉽게

lists = { 
    "x": [], 
    "y": [] 
} 

def test(pName): 
    lists[pName].append(1) 

test("y") 

는 전역 또는 Similars 참조 이럴을 사용하는 것보다 이해하기.

+0

작동하지 않습니다. 'y'는 객체를 참조하는 이름이고''y''는 하나의 char 문자열을 시작해야한다는 것을 구분해야합니다. – quapka

2

당신은 함수에 변수 이름의 문자열을 전달, globals을 사용할 수 있습니다 다음과 같습니다

def test(pName): 
    globals()[pName].append(1) 

test('y') 

이, 물론,에 의존 글로벌 범위에 존재하는 이름. 당신이 원하는 모든 다른 "네임 스페이스"로 객체를 저장할 수하는 경우

+0

아마도'locals()'로 충분할 수 있습니까? –

+0

그리고 수업 중에 사용하면 효과가 있습니까? self.globals()가 오류를 유발할 수 있기 때문입니다. – freedome97

+0

globals()는 내장되어 있습니다. globals()에는 모든 전역이 들어 있습니다. –

2

배열을 사전에 넣을 수 있습니다. 배열의 고정 된 숫자가 있다고 가정하면, 코드는 다음과 같을 것이다 :

arrays = {} 
arrays['x'] = [] 
arrays['y'] = [] 

def test(pName): 
    arrays[pName].append(1) 

test('y') 
당신은 키 예외가 발생합니다 사전에 키가 아닌 이는 pName은 같이 사용자의 입력을 확인하는 것이 좋습니다

. 배열을 동적으로 만들려면 다음과 같이하면됩니다.

arrays={} 
def test(pName): 
    if pName not in arrays.keys(): 
     arrays[pName]=[] 
    arrays[pName].append(1) 

test('y') 
+0

문제의 원인을 알고있는 경우 try/except를 사용하지 마십시오. 'pName이 배열에 없다면 : ... '키 - 값 - 쌍을 만듭니다. 'if' 외부에'1'을 추가합니다. 훨씬 깨끗합니다. –

+0

@MatthiasBurger이 예제에서'try-except' 블록이 좋지 않은 이유는 없습니다. 이것은 일반적으로 제어 흐름에 사용되며이 예에서는 사용자가 이미 존재하는 키를 입력하고 예상하지 않으면 정상적인 경우의 예외로 간주됩니다. 그리고 우리는 모든 문자열을 가져 와서'pName'과 비교할 필요가 없기 때문에 예외적 인 경우에는 더 느리지 만 일반적인 경우에는 더 빠를 것입니다. 또한'try-except'는'if'처럼 깨끗한 것으로 나타났습니다. 왜냐하면 키가 있다면 무엇을 할 것인지를 보여 주었고, 키가 없다면 무엇을 할 것인지를 보여 주었기 때문입니다. –

+0

@TedKleinBergman 나는 결코 말하지 않았다. 아마도 예외가 알려진 경우 try-except를 사용하는 것은 나쁜 습관 일뿐입니다. 개발자가 예외 유형을 입력하지 않고 포켓 몬스터 스타일로 모두 잡을 수있는 경우도 있습니다 (try/except가 쉽기 때문에). 어쩌면 나는 'imho'또는 뭔가를 써야했고, 아마도/else가 try/except보다 낫다고 생각하는 30 % 중 하나입니다. SOTA는 if로 처리 할 수없는 케이스에 try-catch를 사용합니다. 당신이 썼던 것처럼 :'만약 열쇠가 있다면 무엇을 할 것인가? 할 것이 없다면 무엇을 할 것인가? ->'if' –

관련 문제