정글에서 온 개발자
파이썬 ‘=’ 이 연산자가 아니다 논란과 주의할 점 본문
- 사실 논란의 여지가 없다. ‘=’ 은 연산자(operator)가 아니라 **구분기호(delimeter)**다.
- 할당 구분자를 사용한 문장은 식(expression)이 아니고 아니라 문(statement)이다. (=할당문)
- [2. Lexical analysis
A Python program is read by a parser. Input to the parser is a stream of tokens, generated by the lexical analyzer. This chapter describes how the lexical analyzer breaks a file into tokens. Python...
docs.python.org](https://docs.python.org/3/reference/lexical_analysis.html#operators)
- 위 Document를 열어보면 = 이 Operator가 아니라 Delimeter에 자리한 것을 볼 수 있다.
이게 어떤 의미를 가지나?
- statement(문): 실행 결과가 평가될 수 없음.
- expression(식) : 실행 결과가 평가될 수 있음.
파이썬에서는 = 이 할당’문’이라서 아래 코드가 에러가 난다.
print(a=1) # TypeError: 'a' is an invalid keyword argument for print()
반면 js는 잘 돌아간다.
console.log(a=1) //1
파이썬부 3.8부터 할당표현식 이 생겼다고 한다.
print(a:=1) #1
표현식이 옆으로 누운 바다코끼리(walrus) 처럼 생겨서 (walrus operator) 라고 한다.
파이썬 할당문의 특징
- 파이썬의 할당문은 연산자가 아니기 때문에 오른쪽 결합연산자도 아니다.
- a=b=1 을 하면 a=1 이 먼저 실행된다.
- 그게 뭔 상관이야 싶지만, 참조 관계를 바꾸는 등 대입의 순서가 중요한 경우 그냥 논리 순서대로 나눠쓰는 것이 좋다.
- [How do chained assignments work?
A quote from something: >>> x = y = somefunction() is the same as >>> y = somefunction() >>> x = y Question: Is x = y = somefunction() the same as x = somefuncti...
stackoverflow.com](https://stackoverflow.com/questions/7601823/how-do-chained-assignments-work)
[7. Simple statements
A simple statement is comprised within a single logical line. Several simple statements may occur on a single line separated by semicolons. The syntax for simple statements is: Expression statement...
docs.python.org](https://docs.python.org/3/reference/simple_stmts.html#assignment-statements)
An assignment statement evaluates the expression list (remember that this can be a single expression or a comma-separated list, the latter yielding a tuple) and assigns the single resulting object to each of the target lists, from left to right.
- 특히 중요한건 immutable을 대입할 때 의도와 다르게 동작할 수 있다.
- 둘 다 같은 id가 할당되기 때문에, 한쪽을 수정하면 다른쪽도 수정돼 버릴 수 있다.
a=b=[1,2,3]
a[2]=0 # a ,b 둘다 [1,2,0]
소소하지만 알고 쓰면 예상치 못한 동작을 예방할 수 있다!
'정리' 카테고리의 다른 글
알고리즘의 분석 (0) | 2023.10.17 |
---|---|
알고리즘과 자료구조의 정의 (1) | 2023.10.17 |
소수 구하기의 여러가지 방법과 시간복잡도 비교 (0) | 2023.10.16 |
음수에서의 모듈러 연산 (0) | 2023.10.15 |
백준 문제 편하게 풀기 (2) | 2023.10.14 |