python

syntax sugar in python

게으른 the lazy 2024. 6. 3. 17:50

True? False?

 

 

파이썬에는 syntax sugar라는 게 있다. Syntactic sugar라고도 부른다.

굳이굳이굳이 번역하자면 문법적 설탕이라고 부를 수 있겠지만,

솔직히 끔찍한 번역이다.

 


 

파이썬의 문법을 엄밀히 따른다면 아래의 statement는 에러가 떠야 한다.

 

a = 1
c = b = a

 

기호 =(assignment)가 operator가 아니라 statement라서 반환값이 없기 때문이다. (참고) 하지만 에러가 발생하지 않는다.

 

 

파이썬에서는 위 statement를 아래와 같이 재해석하기 때문이다.

 

temp = a
c = temp
b = temp

 

이걸 chained assignment라고 부른다. 참고로 왼쪽부터 대입한다. (참고)

 


 

비슷한 게 하나 더 있다. Chained comparison이다. 이름만 들어도 무슨 말인지 알 수 있다. 원래 아래의 expression은 False가 나와야 정상이지만

 

x = -3
-5 < x < -1

 

 

파이썬에서는 True가 나온다.

 

 

프로그래밍 언어에서는 보통 위의 부등식을 아래와 같이 해석하지만,

 

(-5 < x) < -1

 

파이썬에서는 다르게 해석한다.

 

(-5 < x) and (x < -1)

 

이걸 chained comparison이라고 부른다.

 


 

Chained assignment와 chained comparison도 syntax sugar라고 부를 수 있을까? ChatGPT한테 물어보니까 어떨 때는 맞다고 하고 어떨 때는 아니라고 한다. 모두의 합의를 이룬 정의는 없나보다 생각하기로 했다.

 

보통 syntax sugar를 검색하면 아래의 것들이 나온다.

- magic methods

- decorator

- comprehension

- ternary operator (operator라고 부르는 게 맞을까?)

 

나에게 이것들은 chained assignment, chained comparison과는 다른 결로 느껴진다. 왜냐하면, magic methods나 decorator 등은 "코드 작성을 편하게 해주는 도구"인 반면, chained assignment/comaprison은 그것을 뛰어넘어 "원래는 안되는데 특별히 되게 해주는 것"이기 때문이다. 어차피 합의된 정의가 없으니 무슨 상관이겠냐 싶다만.

 

ChatGPT는 syntax sugar를 아래와 같이 정의한다.

 

Python에서 "syntactic sugar"는 코드의 기능에는 변화를 주지 않지만, 코드의 가독성을 높이거나 표현을 더 간단하게 만들어주는 언어 기능을 의미합니다. 이러한 기능들은 본질적으로 코드의 축약형 표현을 제공하여 코드를 더 간결하고 종종 더 읽기 쉽게 만듭니다.
- comprehension
- lambda function
- ternary operator
- unpacking
- decorator
- context manager
- iterator
- default argument value

 

 

아래는 윤쌤의 답변이다.

 

Syntax Sugar는 프로그래밍 언어에서 코드를 좀 더 간결하고 읽기 쉽게 만들기 위해 제공되는 문법적 기능을 말합니다. 이를 통해 개발자들은 복잡한 코드를 더 간단하고 명확하게 표현할 수 있습니다.
- comprehension
- lambda function
- unpacking
- membership operator
- string formatting

 

 

아래는 파이썬 클린코드 책에 써있는 역자 주이다.

 

어떤 언어에서 동일한 기능이지만 타이핑의 수고를 덜어주기 위해, 또는 읽기 쉽게 하기 위해 다른 표현으로 코딩할 수 있게 해주는 기능

 

마지막 표현이 가장 명료한 것 같다. 써놓고 보니 chained assignment/comparison도 syntax sugar로 보아야 할 것 같다. 코드를 재해석 해서 다른 표현을 실행한다는 면에서는 comprehension, decorator와 동일하니까 말이다.

 


 

구글에서 syntax sugar 검색 결과 중 볼만한 것들을 몇 가지 적어본다.

 

Syntax Sugar in Python

파이썬의 다양한 Syntactic Sugar

What's your favorite syntactic sugar in python? (reddit)

 

개인적으로는 unpacking이 최강자라고 생각한다. 아래를 보자. 아름답지 않은가?

 

 

같이 읽기

Expression vs Statement

Why does chained assignment work this way?

왜 리스트 컴프리헨션에 if만 있을때와 else도 있을 때 문법이 다를까?

 

끗.