- 변수, 함수, 객체 등 프로그래밍에 대한 기초 지식이 있는 사람
- 파이썬을 사용 해본적 있지만 자세히 모르는 사람
- 흥미 위주로 파이썬에 대해 읽을 거리가 필요한 사람
본 포스팅은 프로그래밍에 대한 기본 개념이 있는 아는 사람이, 파이썬을 사용하면서/사용하기전 미리 알고 있으면 좋을 개념들을 간략하게 정리하기 위해 작성 되었습니다. 모든 부분을 상세히 설명하는 것보다, 새로운 개념을 소개하고 읽을 거리를 추천하는 형식으로 작성했습니다.
내용이 수정되거나 추가 될 수 있습니다 :)
파이썬이 프로그래밍을 처음 접하는 사람에게 추천 되어서 망각되는 부분이다. 파이썬은 명령적 성격을 지닌 객체지향 언어이다. 파이썬에서 모든 것은 객체이다.
잠시만요~ 파이썬에는 클로저도 있고, 고차함수도 있고, 익명함수도 있고 함수지향 적인 부분이 많지 않나요?
맞는 말이다. 파이썬의 함수는 일급함수이다. 파이썬을 사용하면서 순수함수를 사용하고 선언적으로 프로그래밍 할 수 있다. 파이썬의 기능이 확장 되면서 lambda, map, filter 같은 함수지향 파라다임에 영향을 받은 기능이 추가 되었다. 하지만 파이썬 개발자들은 list comprehension을 선호하고 귀도 반 로섬도 파이썬을 함수지향 언어로 보지 않았다고 한다.
Origins of Python's "Functional" Features
Functional Programming in Python
파이썬은 인터프리터 언어로 한줄 읽어지면서 실행 되요~
맞는말이다. 그런데 의문이 들지 않는가? 파이썬 코드를 작성 해놓으면 윈도우에서도 동작하고 맥에서도 동작하고 리눅스에서도 동작한다. 어떻게 그런 걸까. Java의 "Write once, run anywhere(WORA)"이 생각이 난다면 정답이다. JVM 처럼 PVM이 존재한다. 무슨 말인지 모르겠다고요? 최대한 간략하게 설명을 해보겠다.
우리는 .py
확장자로 파이썬 소스코드를 작성한다. 이 코드는 컴퓨터에 의해서 바로 실행 되지 않고 바이트코드라는 플랫폼 독립적인 저차원 코드로 컴파일 된다. 이 바이트코드는 Python Virtual Machine(PVM)이라는 플랫폼 종속적인 프로그램에 의해 실행 된다.
파이썬의 컴파일과 실행을 담당하는 대표적인 프로그램이 Cpython이다. Cpython은 이름 그대로 C언어로 구현되어 있다. Cpython 이외에 Jpython, pypy 같은 임플리멘테이션이 있다.
Understaing Python Bytecode
How Does Python Work
자바스크립트 개발자에게 특히 유의미한 부분일 수 있다. 파이썬 버전 2 까지는 언어 레벨에서 비동기 프로그래밍을 지원하지 않았다. Twisted 같은 이벤트 기반 엔진이나 Tornado 같은 비동기 웹프레임 워크가 존재하긴 했다. 하지만 버전 3.4 부터 asyncio라는 공식 라이브러리가 추가 되었고, async
await
문법을 통해서 비동기 프로그램을 할수 있게 되었다.
asyncio는 상대적으로 새로운 파이썬 모듈이다. 파이썬 버전 마다 api가 자주 바뀌고 이미 deprecated 된 부분도 존재하니, 기왕이면 공식문서를 참고 하자
파이썬의 globals()
나 locals()
키워드가 무엇인지 궁금하지 않았는가? 해당 키워드는 파이썬의 특정 네임스페이스를 접근하기 위해서 사용된다. 파이썬에서 네임스페이스는 스코프를 구현하기 위한 구현 방법이다. 네임스페이스는 파이썬의 자료형의 하나인 dictionary로 구현 되어있다. 파이썬의 네임스페이스에는 네가지 종류가 있다.
- Built-In
- Global
- Enclosing
- Local
변수의 참조는 4 > 3 > 2 > 1
의 순서로 간다. 함수안에서 글로벌 네임스페이스에 접근하기 위해선 global
이라는 키워드를 명시 해야한다.
파이썬 소스코드를 보면서 언더바 두개로 감싸진 함수를 본적이 있을 것이다. 대표적으로 __init__
이 있겠다. 이러한 메소드는 magic method 또는 special method라고 불린다.
왜 하필 magic method 이냐고? 사용자가 정의한 클래스에 마법 같은 기능을 부여하기 때문이다
말이냐 방구냐고? 풀어서 설명 해보겠다. 매직 메소드를 클래스에 추가하면, 사용자가 생성한 커스텀 클래스가, 파이썬의 빌트인 타입과 동일한 동작을 할수 있게 하는 것이 가능하다.
매우매우 간략한 예시를 들자면 __eq__
라는 메소드를 정의하면 ==
연산자를 오브젝트에 사용할 시 어떻게 동작 할지 정의 할 수있다.
파이썬의 모든 것은 객체이다. 어떤 객체는 mutable이고 어떤 객체는 immutable인지 알면 좋다. 아래의 그래프도 한번 훑어보자. 빨간색 박스에서 시작해서 화살표 방향으로 읽으면 된다.
- List are Mutable.
- List are the most popular type of Collections
- List are orderd group of Elements which are actually Pointers.
Mutable and Immutable Side of Python
🚧 추가 예정
Python Class Attributes an Overly Thorough Guide
javascript에는 prettier가 있고 golang에는 gofmt가 있는데 파이썬은? 삼대장이 있다. autopep8
, yapf
, black
에서 취향껏 선택하면 된다. 글쓴이는 black을 사용 중이다.