2017-01-31 1 views
14

다소 학문적이지만 그럼에도 불구하고.파이썬의 변수 이름은 숫자로 시작할 수 없나요?

파이썬 구문은 숫자가있는 변수 이름을 시작하지 않습니다. 그러나 이것은 이렇게 피할 수 있습니다 :

>>> globals()['1a'] = 1 
>>> globals()['1a'] 
1 

마찬가지로 locals()입니다.

파이썬이 실제로 그것을 허용한다는 것을 의미합니까?

편집 :

내 질문이 허용되는지 여부 아니다. 나는 그것이 공식적으로 파이썬에서 허용되지 않는다는 것을 알고있다. 질문은 왜 globals()을 직접 주소 지정하여 해결할 수 있는지, 그리고 다른 규칙이나 지침을 어기는 지, 아니면 허용할만한 이유가 있는지/응용 프로그램인지에 관한 것입니다.

+2

파서는 그것을 허용하지 않지만,'globals()'를 하이재킹함으로써 할 수 있습니다. 그러나 당신은 정말로 그것을하기위한 것이 아닙니다. – Kevin

+7

나중에 변수로 사용할 수 없습니다 ... 동일한 네임 스페이스에 있더라도 실제로 변수가 아닙니다. – tdelaney

+0

답변 (중복) : http://stackoverflow.com/questions/342152/why-cant-variable-names-start-with-numbers – MichaelMMeskhi

답변

11

파이썬 파서 그렇게 변수 명명 금지 명명 별도로 파싱 수와 변수의 술에 대한 변수 1e1은 숫자가 10.0이거나 변수가 1e1일까요?

"파이썬으로 출력 해주세요. 1e1!" - "왜 10.0이야?저기서 100 개를 저장 했어!"

그러나이 기능은 어떤 종류의 맵을 해싱 등이 "속임수"를 사용에 아무런 해가 없기 때문에 변수가 실제로 값을 숫자로 시작하는 문자열을 결합 허용하는 방식으로 저장된다 파서 분리 가능성을 해치지 않으면 서 원하는 접두사 이름 변수를 얻을 수 있습니다.

그런 식으로 변수 이름을 지정하면 이 아니며, 파이썬 가이드 라인에 대한 위반이 아니지만 대개는 불필요한 것으로 간주됩니다. 변수를 주입하기 위해 globals을 사용하는 것은 불량 사례으로 알려져 있으며이 사례는 미처리하지 않아야합니다. 물론


는, 파이썬 문자열과 같은 숫자에 encloser를 사용할 수도, *123* 말,하지만 난 파이썬 발명의 목적은 변수 명명 공간의 한계를 스트레칭, 쉽게하지 프로그래밍을 만드는 것이 었습니다 생각합니다.당신 해야 사용 번호 머리 이름 당신은 더 나은 자신의 사전와 함께 할 경우


는 실질적으로 globals보다는 말하기 :

>>> number_headed_vars = {'1a': 100} 
>>> number_headed_vars['1a'] 
100 

당신이 당신의 자신의 변수 시스템을 만들 수 있습니다 그 방법 - 악용을 피하십시오. globals().

6

세계에서 1a으로 할 수있는 일과 할 수없는 일입니다. 전역에서 정의를 모두 사용하지 않으면 (사실 그 사전에 액세스하는 것을 의미합니다) 사용법에 대해 매우 불편하게 만듭니다 (그렇게하지 않는 또 다른 이유). 다음 출력에 나타낸 바와 같이 기본적

1aa1 같은 실제 변수 아니다 :

>>> globals()['1a'] = 1 
>>> globals()['1a'] 
1 

>>> a = 1a 
File "<stdin>", line 1 
    a = 1a 
     ^
SyntaxError: invalid syntax 

>>> a = globals()['1a'] 
>>> a 
1 

>>> globals()['a1'] = 5 
>>> a = a1 
>>> a 
5 
+1

. 이것이 합리적이지만, 사실이 아닙니다. 문제는 '1a'가 '실제'변수가 아니라는 것입니다. 코드에서 사용할 수없는 이유는 파서 **가 변수로 '1a'를 토큰화할 수 없기 때문입니다 (가능한 경우 정상적으로 '전역'에 저장되므로 완벽하게 작동했을 것입니다.) . 나머지는 모두 좋다. – Uriel

관련 문제