2016-12-11 5 views
0

이 규칙이 here 인 것을 발견했습니다. 이 starred_item과 어떻게 동등한 지 알지 못했습니다. 아무런 문제가없는 경우, 내 코드 a = 8;b = 2; *(a >> b), = (1,2,3)이 "SyntaxError : can ' t 연산자에 할당? " 파이썬에서파이썬의 모든 작은 EBNF 규칙을 더 큰 올바른 규칙으로 구성 할 수 있습니까?

+1

당신도이 문을 어떻게 할 것인가? – jsbueno

+0

그 코드는 의미가 없으므로 'SyntaxError'가 발생한다는 것은 완전히 이해할 수 있습니다. OTOH,'* a, = 1, 2, 3'은 유효합니다 (최신 버전의 Python에서). –

+0

파이썬 표현의 구문을 연구 중이다. 나는'starred_expression'으로 분류 된 특정 규칙으로부터''(identifier ">>"identifier ") 규칙을 도출했다. 터플이나리스트는 왼쪽에 나타날 수있다. 간단한 할당이므로'* (identifier ">>"identifier ")가 될 수 있습니다. 그러나 올바른 결과를 얻지 못했습니다. –

답변

1

귀인 이론 - 할당 연산자 = 또는 증강 연산자 중 하나 (+=, -=, ...)로 발생 실제로 문이며, C에서와 같이 정상적인 표현의 일부로 사용할 수 없습니다 -syntax 파생 된 언어.

과제의 왼쪽 부분은 변수 이름 (또는 일련의 이름)으로 이해해야합니다.

사용하려는 표현이 *a >> b, = (1,2,3) (달성하고자하는 것을 이해할 수 없다는 것을 인정합니다)은 시퀀스와 같습니다. 첫 번째 요소는 *a >> b입니다. 파이썬에서 이름 - 따라서 오류.

은 "*는"assignemnts는 이름의 순서의 다른 부분에 속성 후 "의 왼쪽"고 어떤 아이폰에이 별표 이름에 할당되는 것을 의미에서 :

In [3]: *a, b = (1, 2, 3) 

In [4]: a 
Out[4]: [1, 2] 

In [5]: b 
Out[5]: 3 

그리고 그 결정과 A *가 나타납니다 작품마다 :

In [6]: a, b, *c, d = range(10) 

In [7]: [a, b, c, d] 
Out[7]: [0, 1, [2, 3, 4, 5, 6, 7, 8], 9] 

그리고 물론

, 하나, 별 2 개를 사용하려고하면 때문에 모호함에 오류가 발생합니다 :

In [8]: *a, *b, c = range(5) 
    File "<ipython-input-8-e75ad61b842a>", line 1 
    *a, *b, c = range(5) 
         ^
SyntaxError: two starred expressions in assignment 

다시 말하지만, 속성 연산자의 왼쪽에는 임의의 표현식이 허용되지 않습니다.

할당되지 않은 식에서 * 연산자를 사용하여 반복 가능한 iterable을 확장 할 수 있습니다. 기능에서만 가능했던 파이썬 3.5, 최대 호출 - 지금은 리터럴의 순서가 예상되었다 어디서나 가능하다 :

In [9]: a = 0, *range(10, 12), 2 

In [10]: a 
Out[10]: (0, 10, 11, 2) 
+0

[PEP-3132] (https://www.python.org/dev/peps/pep-3132/)에 의해 소개 된이 결론을 알았습니다. –

+0

[할당 문구] (https://docs.python.org/3.5/reference/simple_stmts.html#assignment-statements)의 EBNF 규칙을 찾았습니다.이 규칙은 제 상황을 설명하고 답변을 확인했습니다. –