파이썬은 1980년대 말 귀도 반 로섬이 개발한 객체 지향적 프로그래밍 언어이다. 몬티 파이튼의 날아다니는 서커스에서 이름을 따왔으며, ABC, Modula-3 등 여러 언어의 영향을 받았다. 파이썬은 2.0, 3.0 버전을 거치며 쓰레기 수집, 유니코드 지원 등 다양한 기능이 추가되었고, 2.x와 3.x 버전 간의 호환성 문제로 인해 3.x 버전으로의 전환이 이루어졌다. 파이썬은 간결한 문법과 확장성, 다양한 라이브러리를 제공하며, 웹 개발, 과학 계산, 인공지능 등 다양한 분야에서 활용된다. 파이썬은 들여쓰기를 통한 블록 구조, 동적 타이핑, 강력한 타입 시스템을 특징으로 하며, NumPy, SciPy, TensorFlow 등의 라이브러리를 통해 다양한 기능을 수행한다. 파이썬은 또한, PyPI를 통해 다양한 패키지를 제공하며, PyCharm, Visual Studio Code 등 여러 통합 개발 환경(IDE)에서 지원된다.
더 읽어볼만한 페이지
1991년 개발된 프로그래밍 언어 - 비주얼 베이직 비주얼 베이직은 1991년 마이크로소프트에서 출시된 GUI 기반 응용 프로그램 개발에 강점을 가진 프로그래밍 언어이며, 윈도우용 응용 프로그램 및 데이터베이스 조작 프로그램 개발에 주로 사용되었고, 2005년 표준 지원이 중단되었다.
1991년 개발된 프로그래밍 언어 - 오즈 (프로그래밍 언어) 오즈는 게르트 스몰카가 설계한 다중 패러다임 프로그래밍 언어로서, 논리형, 함수형, 명령형, 객체 지향, 제약, 분산, 동시 프로그래밍을 지원하며 간단한 형식 의미론과 효율적인 구현을 목표로 한다.
파이썬 - 귀도 반 로섬 귀도 반 로섬은 네덜란드 출신의 프로그래머로, 1989년 크리스마스 기간에 취미로 파이썬 프로그래밍 언어를 개발했으며, 구글과 드롭박스 등에서 일하다 2020년 마이크로소프트에 수석 엔지니어로 합류했다.
파이썬 - 모조 (프로그래밍 언어) 모조는 모듈러사에서 개발한 파이썬과 유사한 구문의 고성능 프로그래밍 언어로, AI 애플리케이션 개발에 초점을 맞추고 러스트의 영향을 받은 메모리 안전성을 제공하며 향후 오픈 소스로 전환될 예정이다.
병행 프로그래밍 언어 - 자바 (프로그래밍 언어) 자바는 제임스 고슬링 등에 의해 개발된 객체 지향 프로그래밍 언어로, 다양한 플랫폼에서 실행 가능하며 샌드박스 모델 기반의 보안 기능, 자동 메모리 관리, 멀티스레딩 등을 지원한다.
병행 프로그래밍 언어 - 스칼라 (프로그래밍 언어) 스칼라는 마틴 오더스키가 설계한 객체 지향 및 함수형 프로그래밍 언어이며, 자바 플랫폼에서 실행되고 자바 코드와 상호 운용이 가능하며, 아파치 스파크 등 다양한 곳에서 활용된다.
티어 1: 64비트 리눅스, macOS; 64비트 및 32비트 윈도우 10+ 티어 2: 예: 32비트 WebAssembly (WASI) 티어 3: 64비트 안드로이드, iOS, FreeBSD, (32비트) Raspberry Pi OS 비공식 (또는 작동하는 것으로 알려짐): 기타 유닉스 계열/BSD 변형 및 몇몇 다른 플랫폼
라이선스
파이썬 소프트웨어 재단 라이선스
파일 확장자
.py, .pyw, .pyz, .pyi, .pyc, .pyd
방언
Cython RPython Starlark
영향을 받은 언어
ABC Ada ALGOL 68 APL C C++ CLU Dylan Haskell Icon Lisp Modula-3 Perl Standard ML
영향을 준 언어
Apache Groovy Boo Cobra CoffeeScript D F# GDScript Go JavaScript Julia Mojo Nim Ring Ruby Swift
파이썬은 1980년대 말 귀도 반 로섬이 네덜란드의 Centrum Wiskunde & Informatica(CWI)에서 ABC 프로그래밍 언어의 후속으로 구상하였다. ABC는 SETL에서 영감을 받았으며, 예외 처리를 수행하고 아메바 운영 체제와 인터페이스할 수 있었다. 파이썬 구현은 1989년 12월에 시작되었다. 반 로섬은 2018년 7월 12일까지 수석 개발자로서 프로젝트 책임을 맡았으며, 파이썬 커뮤니티는 그의 장기적인 헌신을 반영하여 "종신 자비로운 독재자"(BDFL)라는 칭호를 부여했다.(그는 이후 은퇴를 번복하고 스스로를 "BDFL-원로"라고 칭했다). 2019년 1월, 파이썬 핵심 개발자들은 프로젝트를 이끌 5명의 운영 위원회를 선출했다.[28][29]
파이썬이라는 이름은 영국 코미디 시리즈 몬티 파이튼의 날아다니는 서커스에서 유래되었다.[30]
파이썬은 들여쓰기를 사용해서 블록을 구분하는 독특한 문법을 채택하고 있다. 이는 파이썬에 익숙한 사용자나 기존 프로그래밍 언어에서 들여쓰기의 중요성을 높이 평가하는 사용자에게는 잘 받아들여지고 있지만, 다른 언어 사용자에게서는 프로그래머의 코딩 스타일을 제한한다는 비판도 받고 있다.
파이썬은 1980년대 말 귀도 반 로섬이 네덜란드의 Centrum Wiskunde & Informatica(CWI)에서 ABC 프로그래밍 언어의 후속으로 구상하였다. ABC는 SETL에서 영감을 받았으며, 예외 처리를 수행하고 아메바 운영 체제와 인터페이스할 수 있었다. 파이썬 구현은 1989년 12월에 시작되었다.
반 로섬은 2018년 7월 12일까지 수석 개발자로서 프로젝트 책임을 맡았으며, 파이썬 커뮤니티는 그의 장기적인 헌신을 반영하여 "종신 자비로운 독재자"(BDFL)라는 칭호를 부여했다. 그는 이후 은퇴를 번복하고 스스로를 "BDFL-원로"라고 칭했다. 2019년 1월, 파이썬 핵심 개발자들은 프로젝트를 이끌 5명의 운영 위원회를 선출했다.[28][29]
파이썬이라는 이름은 영국 코미디 시리즈 몬티 파이튼의 날아다니는 서커스에서 유래되었다고 한다.[30]
2. 2. 파이썬 2
2000년 10월 16일에 출시된 파이썬 2.0에는 리스트 컴프리헨션, 순환 참조 탐지 기능이 포함된 쓰레기 수집기(GC, Garbage Collector), 유니코드 지원 등 많은 주요 기능이 추가되었다.[2] 파이썬 2.0 개발은 이전보다 더 투명하고 공동체의 지원을 받는 형태로 변화했다.
파이썬 2.7의 제품 수명 종료는 처음에는 2015년으로 설정되었지만, 기존 코드의 상당 부분이 파이썬 3으로 쉽게 이전될 수 없다는 우려로 인해 2020년으로 연기되었다.[31][32]2020년 1월 1일부로 파이썬 2의 지원이 종료되었다.[232][233]
파이썬 3.0은 코드명 '파이썬 3000' 또는 '파이썬3k'로도 불렸으며, 2008년 12월 3일에 긴 테스트를 거쳐 출시되었다.[209] 파이썬 3.0은 2.x 버전과 하위 호환성이 없다는 것이 가장 큰 특징이다. 그러나 파이썬 3의 주요 기능 다수가 이전 버전과 호환되도록 파이썬 2.6 및 2.7에 백포트되었다.[196]
파이썬 공식 문서에서는 "파이썬 2.x는 레거시(낡은 기술)이고, 파이썬 3.x가 파이썬의 현재와 미래가 될 것"이라고 요약하며, 처음 프로그래밍을 배우는 사람들에게는 파이썬 3으로 시작할 것을 권장한다.[234]
파이썬 2.x 버전과 비교하여 파이썬 3.x 버전의 주요 차이점은 다음과 같다.
사전형과 문자열형 등 내장 자료형의 내부적인 변화 및 일부 구형 구성 요소 제거.
표준 라이브러리 재배치.
향상된 유니코드 지원: 파이썬 2.x에서는 유니코드를 표현하기 위해 `u"문자열"`처럼 유니코드 리터럴을 사용했지만, 파이썬 3.0부터는 모든 문자열이 유니코드이므로 `"문자열"`처럼 표현한다.[235]
한글 변수 사용 가능.
`print` 명령문이 `print()` 함수로 변경.[209]
버전
릴리즈일[201]
지원 종료일[208]
3.0
2008년 12월 3일
2009년 1월 13일
3.1
2009년 6월 27일
2012년 4월 9일
3.2
2011년 2월 20일
2016년 2월 20일
3.3
2012년 9월 29일
2017년 9월 29일
3.4
2014년 3월 16일
2019년 3월 18일
3.5
2015년 9월 13일
2020년 9월 30일
3.6
2016년 12월 23일
2021년 12월
3.7
2018년 6월 27일
2023년 6월
3.8
2019년 10월 14일
2024년 10월
3.9
2020년 10월 5일
2025년 10월
3.10
2021년 10월 4일
2026년 10월
3.11
2022년 10월 24일
2027년 10월
3.12
2023년 10월 2일
2028년 10월
각 버전별 주요 변경 사항은 다음과 같다.
'''3.1'''[210][211]
순서가 있는 사전
단위 테스트 프레임워크 "unittest"에 기능 추가
Tkinter에서 Tile 지원
import문의 레퍼런스 구현이 되는, 파이썬으로 구현한 importlib 모듈
중첩된 with문에 대한 새로운 문법
'''3.2'''[212]
단위 테스트 모듈의 업데이트 및 확장 모듈용 stable ABI
pyc 레포지토리 디렉토리 지원
E-mail 패키지 및 SSL 모듈 개선
pdb (Python 디버거) 개선
;3.3
: 3.1 릴리즈로부터 2년간, 언어 사양을 동결하고 변경하지 않는 "모라토리엄 기간"을 해제했다[213].
새로운 문법으로, 제너레이터 함수 내에서 다른 제너레이터 함수를 이용하는 "yield from" 추가.
"u"나 "U"와 같은 프리픽스를 사용한 유니코드 리터럴 구문 부활
UCS-4 문자열에도 대응하여 문자열 표현의 유연성 강화
가상화 파이썬 실행 환경을 도입하기 위한 virtualenv 패키지 기능을 "venv" 기능으로 코어에 통합.
;3.4[214][215]
객체 지향 파일 시스템 경로를 제공하는 "pathlib" 모듈 제공
열거형을 다루기 위한 enum 모듈 표준화
통계 함수를 제공하는 statistics 모듈 도입
파이썬이 할당한 메모리 블록을 추적하기 위한 디버깅 도구인 tracemalloc 모듈 도입
비동기 I/O를 다루기 위한 프레임워크인 asyncio 모듈 도입
파이썬의 내장 함수에 관한 분석 정보를 얻기 위한 기구 구현
;3.5[216][217]
zip 애플리케이션 지원 개선
byte/bytearray 객체를 위한 "%" 형식 지원 추가
행렬 곱셈 연산자 @ 도입
고속 디렉토리 트래버설 기능 os.scandir() 도입
인터럽트가 발생한 시스템 콜의 자동 재시도 기능 추가
근사치인지 테스트하는 기능 도입
.pyo 파일 삭제
확장 모듈을 로드하기 위한 새로운 방식 도입
;3.6[218]
문자열 안에 식을 삽입할 수 있는 "Formatted string literals" 도입
변수에 대해 타입 정보를 (타입 힌트) 제공하는 "Syntax for variable annotations" 도입
"async" 및 "await" 문법 (async/await)으로 코루틴을 이용 가능하게 하는 "Asynchronous generators" 도입
파이썬은 1989년 12월에 귀도 반 로섬에 의해 구현이 시작되었다. 2018년 7월 12일까지 프로젝트의 최고 개발자를 맡았으며, 파이썬 커뮤니티는 그에게 "종신 자비로운 독재자(BDFL)"라는 칭호를 부여했다. 2019년 1월, 파이썬 핵심 개발자들은 5명의 운영 위원회를 선출했다.[28][29]
파이썬 2.0은 2000년 10월 16일에 출시되었으며, 리스트 컴프리헨션, 순환 참조 탐지 가비지 컬렉션, 참조 카운팅, 유니코드 지원과 같은 기능이 추가되었다. 파이썬 2.7의 제품 수명 종료는 2020년으로 연기되었고,[31][32] 더 이상의 보안 패치나 개선 사항은 출시되지 않는다.[33][34]
파이썬 3.0은 2008년 12월 3일에 출시되었으며, 새로운 구문과 변경된 의미론을 포함했다. 파이썬 3.13이 최신 안정 릴리스이며, 파이썬 3.9가[36] 가장 오래된 지원 버전이다.[37][38] 3.13부터는 2년의 전체 지원 기간과 3년의 보안 지원이 제공된다.
2021년에는 보안 업데이트가 가속화되었는데, 모든 파이썬 버전이 원격 코드 실행[40] 및 웹 캐시 포이즈닝[41]을 유발할 수 있는 보안 문제로 인해 안전하지 않았기 때문이다.
파이썬 3.10은 `|` 유니온 타입 연산자[42]와 구조적 패턴 매칭 문을 추가했다. 3.11은 예외 처리 기능을 확장했다. 파이썬 3.12는 새로운 키워드 `type`을 추가했다. 3.11은 파이썬 3.10보다 10%에서 60% 더 빠르다고 하며,[43] 파이썬 3.12는 5%를 더 추가한다.
파이썬 3.13은 ''실험적'' JIT (적시) 컴파일러[44] 및 전역 인터프리터 잠금(GIL)을 비활성화하는 ''실험적'' 자유 스레드 빌드 모드를 도입했다. 파이썬 3.13은 새로운 "정의된 의미론"을 도입하여 버그를 수정한다.[45]
파이썬 3.14는 현재 알파 2단계에 있다.[48] PEP 711은 파이썬 바이너리 배포를 위한 표준 형식인 PyBI를 제안한다.[50] 파이썬 3.15는 "UTF-8 모드를 기본값으로 설정할 것이다."[51]
파이썬의 개발은 주로 '''파이썬 개선 제안''' (PEP) 프로세스를 통해 진행된다. 파이썬 코딩 스타일은 PEP 8에 설명되어 있다.[118] 언어 개선은 CPython 참조 구현의 개발과 일치한다.
CPython의 공개 릴리스는 세 가지 유형으로 제공된다.
이전 버전과의 호환성이 없는 버전.
주요 또는 "기능" 릴리스는 이전 버전과 대체로 호환되지만 새로운 기능을 도입한다. 파이썬 3.9부터 매년 발생할 것으로 예상된다.[122][123]
버그 수정 릴리스는 새로운 기능을 도입하지 않으며, 약 3개월마다 발생한다.
버전
릴리즈일[201]
지원 종료일[208]
3.0
2008년 12월 3일
2009년 1월 13일
3.1
2009년 6월 27일
2012년 4월 9일
3.2
2011년 2월 20일
2016년 2월 20일
3.3
2012년 9월 29일
2017년 9월 29일
3.4
2014년 3월 16일
2019년 3월 18일
3.5
2015년 9월 13일
2020년 9월 30일
3.6
2016년 12월 23일
2021년 12월
3.7
2018년 6월 27일
2023년 6월
3.8
2019년 10월 14일
2024년 10월
3.9
2020년 10월 5일
2025년 10월
3.10
2021년 10월 4일
2026년 10월
3.11
2022년 10월 24일
2027년 10월
3.12
2023년 10월 2일
2028년 10월
'''파이썬 3.0'''[209]
print 명령어를 print 함수로 변경
유니코드 전면 채용
정수를 int형으로 일원화
'''파이썬 3.1'''[210][211]
순서가 있는 사전
단위 테스트 프레임워크 "unittest"에 기능 추가
Tkinter에서 Tile 지원
import문의 레퍼런스 구현이 되는, 파이썬으로 구현한 importlib 모듈
중첩된 with문에 대한 새로운 문법
'''파이썬 3.2'''[212]
단위 테스트 모듈의 업데이트 및 확장 모듈용 stable ABI
pyc 레포지토리 디렉토리 지원
E-mail 패키지 및 SSL 모듈 개선
pdb (Python 디버거) 개선
'''파이썬 3.3'''
: 3.1 릴리즈로부터 2년간, 언어 사양을 동결하고 변경하지 않는 "모라토리엄 기간"을 해제했다[213].
새로운 문법으로, 제너레이터 함수 내에서 다른 제너레이터 함수를 이용하는 "yield from" 추가.
"u"나 "U"와 같은 프리픽스를 사용한 유니코드 리터럴 구문 부활
UCS-4 문자열에도 대응하여 문자열 표현의 유연성 강화
가상화 파이썬 실행 환경을 도입하기 위한 virtualenv 패키지 기능을 "venv" 기능으로 코어에 통합.
'''파이썬 3.4'''[214][215]
객체 지향 파일 시스템 경로를 제공하는 "pathlib" 모듈 제공
열거형을 다루기 위한 enum 모듈 표준화
통계 함수를 제공하는 statistics 모듈 도입
파이썬이 할당한 메모리 블록을 추적하기 위한 디버깅 도구인 tracemalloc 모듈 도입
비동기 I/O를 다루기 위한 프레임워크인 asyncio 모듈 도입
파이썬의 내장 함수에 관한 분석 정보를 얻기 위한 기구 구현
'''파이썬 3.5'''[216][217]
zip 애플리케이션 지원 개선
byte/bytearray 객체를 위한 "%" 형식 지원 추가
행렬 곱셈 연산자 @ 도입
고속 디렉토리 트래버설 기능 os.scandir() 도입
인터럽트가 발생한 시스템 콜의 자동 재시도 기능 추가
근사치인지 테스트하는 기능 도입
.pyo 파일 삭제
확장 모듈을 로드하기 위한 새로운 방식 도입
'''파이썬 3.6'''[218]
문자열 안에 식을 삽입할 수 있는 "Formatted string literals" 도입
변수에 대해 타입 정보를 (타입 힌트) 제공하는 "Syntax for variable annotations" 도입
"async" 및 "await" 문법 (async/await)으로 코루틴을 이용 가능하게 하는 "Asynchronous generators" 도입
파이썬은 초보자부터 전문가까지 폭넓은 사용자층을 가진 동적 타이핑 범용 프로그래밍 언어이다. 펄, 루비와 자주 비교되며, 다양한 플랫폼에서 사용 가능하고 풍부한 라이브러리(모듈)를 제공하여 대학, 연구 기관, 산업계에서 널리 활용되고 있다.
ACM의 조사에 따르면, 파이썬은 자바를 넘어 미국 대학생들에게 프로그래밍 및 컴퓨터 공학 입문용으로 가장 널리 사용되는 언어로 나타났다. 상위 10개 컴퓨터 공학 부문 중 8곳, 상위 39개 학교 중 27곳에서 코딩 교육에 파이썬을 활용하고 있다.[231]
2003년 이후, 파이썬은 TIOBE 프로그래밍 커뮤니티 지수에서 꾸준히 상위 10위 안에 랭크되었으며, 현재 가장 인기 있는 언어이다 (C, C++, 자바보다 앞선다).[26] 또한 2007년, 2010년, 2018년, 2020년에 올해의 프로그래밍 언어("1년 동안 가장 높은 순위 상승")로 선정되었다 (4번이나 선정된 유일한 언어).[131]
파이썬의 설계와 철학은 다른 프로그래밍 언어에도 영향을 주었다.
언어
설명
부(Boo)
파이썬과 유사하게 들여쓰기, 구문, 객체 모델을 사용한다.
코브라(Cobra)
들여쓰기와 유사한 구문을 사용하며, 파이썬을 코브라에 영향을 준 첫 번째 언어로 언급한다.
파이썬과 자바의 기능을 혼합하여 개발자 효율성을 향상시키기 위해 상용구 코드를 최소화한다.[161]
파이썬의 개발 관행은 Tcl, 얼랭(Erlang), 스위프트[162] 등 다른 언어에서도 모방되었다.
3. 철학과 특징
귀도 반 로섬이 개발한 프로그래밍 언어인 파이썬의 핵심 철학은 ''PEP 20'' 문서에 잘 정리되어 있으며, 다음과 같다.[236]
"아름다운 게 추한 것보다 낫다." (Beautiful is better than ugly)
"명시적인 것이 암시적인 것보다 낫다." (Explicit is better than implicit)
"단순함이 복잡함보다 낫다." (Simple is better than complex)
"복잡함이 난해한 것보다 낫다." (Complex is better than complicated)
"가독성은 중요하다." (Readability counts)
파이썬은 모든 기능을 언어 자체에 포함하는 대신, 사용자가 필요에 따라 기능을 확장할 수 있도록 설계되었다. 이는 "문제를 해결하는 방법은 단 한 가지가 아니다"라는 펄의 철학과 대조적이다. 파이썬은 "하나의 분명한 방법, 가급적이면 단 하나의 분명한 방법이 있어야 한다"는 철학을 따르지만, 실제로는 동일한 작업을 수행하는 여러 가지 방법을 제공하기도 한다.[58]
파이썬은 읽기 쉽고 효율적인 코드를 간결하게 작성할 수 있도록 하는 철학이 반영되어 있으며, 파이썬 커뮤니티에서도 이러한 코드를 선호한다. 파이썬 소프트웨어 재단의 펠로우이자 파이썬 책 저자인 알렉스 마르텔리는 "무언가를 '영리하다'고 묘사하는 것은 파이썬 문화에서 ''칭찬''으로 간주되지 않는다."라고 썼다.
파이썬은 기본적으로 인터프리터 위에서 실행되도록 설계되었으며 다음과 같은 주요 특징을 가진다.
파이썬은 포괄적인 표준 라이브러리 덕분에 "배터리 포함(Battery Included)" 언어로 표현되기도 한다.[164]
4. 문법
파이썬 문법의 가장 두드러진 특징은 들여쓰기를 사용하여 코드 블록을 구조화한다는 것이다. 이는 C와 같은 다른 언어에서 중괄호({})를 사용하여 블록을 구분하는 것과 대조적이다. 파이썬에서는 들여쓰기가 단순한 코딩 스타일이 아니라 필수적인 문법 요소로, 코드의 가독성과 일관성을 높이는 데 기여한다.
파이썬은 읽기 쉬운 언어를 지향하며, 다른 언어에서 구두점을 사용하는 곳에 영어 키워드를 사용한다. 블록 구분을 위해 중괄호를 사용하지 않고, 문장 뒤에 세미콜론은 거의 사용하지 않는다. C나 파스칼보다 구문 예외와 특수한 경우가 적다.
파이썬은 인터프리터 상에서 실행하는 것을 전제로 설계되었으며, 다음과 같은 특징을 가진다.
동적 타이핑
가비지 컬렉션
멀티 패러다임 프로그래밍 언어
모듈, 클래스, 객체 등의 언어 요소에 내부적으로 접근 가능하며, 리플렉션을 이용한 기술이 가능하다.
파이썬은 "어떤 일을 하는 데에는 단 하나의 좋은 방법이 있을 것이다"라는 철학을 가지고 있으며, 단순하고 간결한 코드를 지향한다.
파이썬은 다음과 같은 자료형들을 갖고 있다.
기본 자료형:
정수형
긴 정수형(long integer) - 파이썬 3 버전에서는 정수형의 범위가 무제한으로 확장되었다.
파이썬에서는 다룰 수 있는 모든 데이터가 객체이다. 단순한 숫자와 같은 기본적인 데이터 형식을 시작으로, 내장 컨테이너 형, 내장 함수 등, 이들은 모두 통일적인 상속 관계를 가진 객체이며 "타입"을 가지고 있다. 이러한 내장형과 사용자 정의형은 구별되지 않으며, 내장형을 상속한 클래스를 정의할 수 있다.
클래스의 상속(inheritance영어) 메커니즘에서는, 여러 개의 기반 클래스를 가질 수 있으며 (다중 상속), 파생된 클래스에서는 기반 클래스의 임의의 메서드를 오버라이드(override영어; 덮어쓰기)할 수 있다.
또한, 객체에는 임의의 데이터를 넣을 수 있다. 이러한 메서드와 데이터는 기본적으로 모두 public이며, virtual(가상)이다. 단, 처음에 언더스코어를 가진 멤버를 private로 할 수 있다.
4. 1. 들여쓰기
파이썬의 문법에서 가장 잘 알려진 특징은 들여쓰기를 이용한 블록 구조이다. 이는 C 등에서 사용하는 중괄호({})를 이용한 블록 구조 대신, 줄마다 처음 오는 공백으로 블록을 구분하는 방식이다. 이 방식은 눈에 보이는 블록 구조가 논리적인 제어 구조와 일치하도록 한다.[62]
`match` 및 `case` 문: switch 문의 아날로그로, 표현식을 여러 케이스와 비교한다.
할당문(`=`)은 이름을 별도의 동적으로 할당된 객체에 대한 참조로 바인딩하며, 변수는 언제든지 다른 객체에 다시 바인딩될 수 있다. 파이썬에서 변수 이름은 고정된 데이터 유형이 없는 일반적인 참조 홀더이며, 항상 형식이 있는 객체를 참조하는 동적 타이핑을 사용한다.
파이썬은 꼬리 호출 최적화나 일급 연속을 지원하지 않으며, 앞으로도 지원하지 않을 것이다. 그러나 제너레이터를 확장하여 코루틴과 유사한 기능을 제공한다.
파이썬은 "어떤 일을 하는 데에는 단 하나의 좋은 방법이 있을 것이다"라는 철학을 가지고 있다.
파이썬은 들여쓰기가 구문 규칙으로 강제되어 소스 코드 스타일이 통일되고 가독성이 높아진다는 특징이 있다. 이는 찬반 양론이 있지만, 인간의 육안 확인과 컴파일러의 구문 분석 차이를 줄여 정확한 코딩을 돕는다고 주장한다.[167]
4. 3. 표현식
파이썬의 식은 다음과 같다.
수학적 덧셈, 뺄셈, 곱셈을 위한 `+`, `-`, `*` 연산자는 다른 언어와 유사하지만, 나눗셈은 다르다. 파이썬에는 몫 나눗셈(정수 나눗셈) `//`과 부동 소수점 `/` 나눗셈 두 가지가 있다.[66] 파이썬은 거듭제곱을 위해 `**` 연산자를 사용한다.
파이썬은 문자열 연결을 위해 `+` 연산자를 사용한다. 또한, 지정된 횟수만큼 문자열을 복제하기 위해 `*` 연산자를 사용한다.
`@` 중위 연산자는 NumPy와 같은 라이브러리에서 행렬 곱셈을 위해 사용하도록 의도되었다.[67][68]
"왈러스 연산자"라고 불리는 `:=` 구문은 파이썬 3.8에 도입되었다. 이 연산자는 더 큰 식의 일부로 변수에 값을 할당한다.[69]
파이썬에서 `==`는 값으로 비교한다. 파이썬의 `is` 연산자는 객체 동일성(참조로 비교)을 비교하는 데 사용될 수 있으며, 비교는 연결될 수 있다(예: `a <= b <= c`).
파이썬은 부울 연산자로 `and`, `or`, `not`을 사용한다.
파이썬에는 ''리스트 컴프리헨션''이라고 하는 식 유형과 ''제너레이터 식''이라고 하는 더 일반적인 식이 있다.
익명 함수는 람다 식을 사용하여 구현된다. 그러나 각 본문에는 하나의 식만 있을 수 있다.
조건식은 `x if c else y`로 작성된다. (다른 많은 언어에서 흔히 사용되는 `c ? x : y` 연산자와 피연산자 순서가 다르다).
파이썬은 리스트와 튜플을 구별한다. 리스트는 `[1, 2, 3]`으로 작성되며, 변경 가능하며, 사전의 키로 사용할 수 없다(사전 키는 파이썬에서 불변이어야 한다). 튜플은 `(1, 2, 3)`으로 작성되며, 불변이므로 튜플의 모든 요소가 불변인 경우 사전의 키로 사용할 수 있다. `+` 연산자는 두 개의 튜플을 연결하는 데 사용할 수 있으며, 이는 내용물을 직접 수정하지 않고 두 튜플의 요소를 포함하는 새 튜플을 생성한다. 괄호는 모호하지 않은 컨텍스트에서 튜플에 대해 선택 사항이다.[70]
파이썬은 여러 식을 사용할 수 있는 ''시퀀스 언패킹'' 기능을 제공하며, 각 식은 할당 가능한 모든 것(변수, 쓰기 가능한 속성 등)으로 평가되며, 튜플 리터럴을 형성하는 것과 동일한 방식으로 연결되어 할당문의 등호의 왼쪽에 전체적으로 놓인다. 이 문은 등호의 오른쪽에 제공된 쓰기 가능한 식과 동일한 수의 값을 생성하는 ''반복 가능'' 객체를 예상한다. 이를 반복하면 생성된 각 값이 왼쪽에 있는 해당 식에 할당된다.[71]
파이썬에는 C의 `printf` 형식 문자열과 유사하게 작동하는 "문자열 형식" 연산자 `%`가 있다. 예를 들어 `"spam=%s eggs=%d" % ("blah", 2)`는 `"spam=blah eggs=2"`로 평가된다. 파이썬 2.6+ 및 3+에서는 `str` 클래스의 `format()` 메서드(예: `"spam={0} eggs={1}".format("blah", 2)`)로 보완되었다. 파이썬 3.6에서는 "f-문자열"이 추가되었다: `spam = "blah"; eggs = 2; f'spam={spam} eggs={eggs}'`.[72]
파이썬의 문자열은 "더하기"(정수 및 부동 소수점 숫자 더하기와 동일한 연산자 사용)를 통해 연결될 수 있다. 예: `"spam" + "eggs"`는 `"spameggs"`를 반환한다. 문자열에 숫자가 포함된 경우 정수가 아닌 문자열로 더해진다. 예: `"2" + "2"`는 `"22"`를 반환한다.
파이썬에는 다양한 문자열 리터럴이 있다.
작은따옴표 또는 큰따옴표로 구분한다. 유닉스 셸, Perl, 및 Perl의 영향을 받은 언어와 달리 작은따옴표와 큰따옴표는 동일하게 작동한다. 둘 다 이스케이프 문자로 백슬래시(`\`)를 사용한다. 문자열 보간은 파이썬 3.6에서 "형식화된 문자열 리터럴"로 사용할 수 있게 되었다.[72]
삼중 따옴표(세 개의 작은따옴표 또는 큰따옴표로 시작하고 끝남)는 여러 줄에 걸쳐 있을 수 있으며 셸, Perl 및 Ruby의 히어 문서와 같이 작동한다.
`r`로 문자열 리터럴을 접두사로 붙여 표시되는 원시 문자열 종류. 이스케이프 시퀀스는 해석되지 않으므로 원시 문자열은 정규 표현식 및 Windows 스타일 경로와 같이 리터럴 백슬래시가 일반적인 경우에 유용하다. ( C#의 "`@`-따옴표"와 비교).
파이썬에는 배열 인덱스 및 배열 슬라이싱 식이 리스트에 있으며, `a[key]`, `a[start:stop]` 또는 `a[start:stop:step]`으로 표시된다. 인덱스는 0부터 시작하며, 음수 인덱스는 끝을 기준으로 한다. 슬라이스는 ''시작'' 인덱스부터 ''중지'' 인덱스까지(포함하지 않음) 요소를 가져온다. 세 번째 슬라이스 매개변수(''단계'' 또는 ''스트라이드'')를 사용하면 요소를 건너뛰고 반전시킬 수 있다. 슬라이스 인덱스는 생략할 수 있다. 예를 들어 `a[:]`는 전체 리스트의 복사본을 반환한다. 슬라이스의 각 요소는 얕은 복사이다.
4. 4. 메서드
객체의 메서드는 객체의 클래스에 연결된 함수이다. 일반적인 메서드와 함수에 대해 `instance.method(argument)` 구문은 `Class.method(instance, argument)`의 구문 설탕이다. 파이썬 메서드는 인스턴스 데이터에 접근하기 위해 명시적인 `self` 매개변수를 갖는데, 이는 C++, Java, Objective-C, Ruby 등 다른 객체 지향 프로그래밍 언어의 암시적 `self` (또는 `this`)와는 대조적이다.
5. 자료형
파이썬은 동적 타이핑의 일종인 덕 타이핑을 사용하는 언어이다. 변수가 아닌 값이 타입을 가지고 있고, 변수는 모두 값의 참조이다.
파이썬은 덕 타이핑을 사용하며, 타입이 지정된 객체를 가지지만 타입이 지정되지 않은 변수 이름을 사용한다. 타입 제약 조건은 컴파일 시간에 검사되지 않는다. 대신, 객체에 대한 연산이 실패할 수 있으며, 이는 해당 객체가 적절한 타입이 아님을 나타낸다. 동적 타입 언어임에도 불구하고, 파이썬은 강력한 타입 언어이며, 의미를 파악하려는 시도 대신 잘 정의되지 않은 연산 (예: 숫자와 문자열을 더하는 것)을 금지한다.
파이썬은 프로그래머가 클래스를 사용하여 자신만의 타입을 정의할 수 있도록 하며, 이는 주로 객체 지향 프로그래밍에 사용된다. 클래스의 새로운 인스턴스는 클래스를 호출하여 생성된다. 이 클래스들은 메타클래스 type (자신의 인스턴스)의 인스턴스이며, 메타 프로그래밍과 리플렉션을 허용한다.
버전 3.0 이전에는 파이썬에 두 종류의 클래스 (모두 동일한 구문 사용)가 있었다: ''구식 스타일''과 ''신식 스타일''. 현재 파이썬 버전은 신식 스타일의 의미론만 지원한다.
파이썬은 선택적 타입 주석을 지원한다.[4][74] 이러한 주석은 언어 자체에서 강제되지 않지만, mypy와 같은 외부 도구에서 오류를 감지하는 데 사용될 수 있다.[75][76] Mypy는 또한 최적화를 위해 타입 주석을 활용하는 mypyc라는 파이썬 컴파일러를 지원한다.[77]
파이썬은 동적 타이핑 시스템을 가지며, 동시에 임의의 타입 힌트를 가지고 외부 도구를 통한 정적 타입 검사를 가능하게 한다. 값 자체가 타입을 가지며, 변수는 모두 값에 대한 참조이다.
기본적인 자료형으로, 논리형, 정수형, 부동소수점형, 복소수형, 문자열형, 바이트열형, 함수형이 있다. 정수형은 (메모리가 허용하는 한) 무제한의 자릿수로 정수 계산이 가능하다. 부동소수점형을 정수형으로 캐스트하면 소수점 이하가 버려진다.
내장 컨테이너형으로, 리스트형, 튜플형, 딕셔너리형, 집합형이 있다. 리스트형 및 딕셔너리형은 가변, 튜플형은 불변이다. 집합형에는 변경 가능한 것과 변경 불가능한 것의 두 종류가 있다. 튜플형과 리스트형은 많은 프로그래밍 언어에서 배열이라고 불리는 것과 유사하다. 그러나 파이썬에서는 튜플형은 딕셔너리의 키로 사용할 수 있지만, 리스트형은 내용이 바뀌기 때문에 딕셔너리의 키로 사용할 수 없다는 이유로 이 두 가지 형을 구분하고 있다.
많은 객체 지향 프로그래밍 언어와 마찬가지로, 파이썬에서는 사용자가 새롭게 자신의 타입을 정의하는 것도 가능하다. 이 경우, 내장 타입을 포함한 기존의 타입을 상속하여 새로운 타입(클래스)을 정의하는 것도, 처음부터 완전히 새로운 타입을 만들어내는 것도 가능하다.
파이썬은 기본적으로 메서드나 함수의 인수에 타입을 지정할 필요가 없다. 따라서 덕 타이핑이라는, 내부에서 필요로 하는 연산자나 메서드에 대응하고 있다면, 함수나 객체의 설계 시점에 의도하지 않았던 객체를 넘겨주는 것도 가능하다. 파이썬은 인터프리터형 언어이며 (대부분의 경우) 프로그램 실행 시 실행 환경(런타임)을 필요로 한다.
파이썬은 덕 타이핑을 사용하며, 타입이 지정된 객체를 가지지만 타입이 지정되지 않은 변수 이름을 사용한다. 타입 제약 조건은 컴파일 시간에 검사되지 않는다. 대신, 객체에 대한 연산이 실패할 수 있으며, 이는 해당 객체가 적절한 타입이 아님을 나타낸다. 동적 타입 언어임에도 불구하고, 파이썬은 강력한 타입 언어이며, 의미를 파악하려는 시도 대신 잘 정의되지 않은 연산 (예: 숫자와 문자열을 더하는 것)을 금지한다.
파이썬은 프로그래머가 클래스를 사용하여 자신만의 타입을 정의할 수 있도록 하며, 이는 주로 객체 지향 프로그래밍에 사용된다. 클래스의 새로운 인스턴스는 클래스를 호출하여 생성된다. 이 클래스들은 메타클래스 type (자신의 인스턴스)의 인스턴스이며, 메타 프로그래밍과 리플렉션을 허용한다.
버전 3.0 이전에는 파이썬에 두 종류의 클래스 (모두 동일한 구문 사용)가 있었다: ''구식 스타일''과 ''신식 스타일''. 현재 파이썬 버전은 신식 스타일의 의미론만 지원한다.
파이썬은 선택적 타입 주석을 지원한다.[4][74] 이러한 주석은 언어 자체에서 강제되지 않지만, mypy와 같은 외부 도구에서 오류를 감지하는 데 사용될 수 있다.[75][76] Mypy는 또한 최적화를 위해 타입 주석을 활용하는 mypyc라는 파이썬 컴파일러를 지원한다.[77]
파이썬은 원래 미국 지역에서 개발되었기 때문에 한글이나 한자와 같은 2바이트 문자를 지원하지 않았다. 그러나 파이썬 2.0에서 유니코드 문자형을 새로 도입하여 여러 나라의 언어를 다룰 수 있게 되었다. 다른 스크립트 언어와 달리 파이썬에서는 문자의 인코딩과 내부 유니코드 표현을 명확하게 구별한다. 유니코드 문자는 메모리에 저장되는 추상적인 개체이다. 화면에 나타내거나 파일 입출력을 할 때는 변환 코덱의 힘을 빌려서 특정 인코딩으로 변환한다. 또, 소스 코드의 문자 코드를 인식하는 기능이 있어, 다른 문자 코드로 쓰여진 프로그램의 동작이 달라질 위험을 줄여 준다. 파이썬 2.4에서는 한·중·일 코덱이 표준으로 배포판에 포함되었으므로 이제 한글 처리에 문제는 거의 없다. 예를 들어 윈도우 판의 IDLE에서 한글 입출력을 잘 지원한다.
파이썬 3.0에서는 문자열이 기본적으로 유니코드로 처리되기 때문에, 파이썬 2.x에서처럼 별도의 유니코드 리터럴을 사용할 필요가 없어졌다.[235]
8. 사용 현황
파이썬은 초보자부터 전문가까지 폭넓은 사용자층을 가진 동적 타이핑 범용 프로그래밍 언어로, 펄, 루비와 자주 비교된다. 다양한 플랫폼에서 사용 가능하고 풍부한 라이브러리(모듈)를 제공하여 대학, 연구 기관, 산업계에서 널리 활용되고 있다. 특히, 다른 언어로 작성된 모듈을 연결하는 접착제 언어로써, 그리고 많은 상용 응용 프로그램에서 스크립트 언어로 채택되고 있다. 유니코드 문자열을 지원하여 다양한 언어의 문자 처리에도 능숙하다.[231]
Python Powered
파이썬은 아파치 웹 서버의 mod_wsgi영어를 통해 웹 애플리케이션 개발에 사용될 수 있다. 또한, NumPy, SciPy, Matplotlib 등의 라이브러리를 활용하여 과학 컴퓨팅 분야에서도 널리 사용된다.[138][139] TensorFlow, Keras, Pytorch, scikit-learn 등의 라이브러리를 통해 인공 지능 및 기계 학습 프로젝트에도 활용된다.[142][143][144][145][146]
정보 보안 산업, 특히 익스플로잇 개발에도 파이썬이 광범위하게 사용된다. One Laptop per Child XO의 Sugar 소프트웨어와 Raspberry Pi 싱글 보드 컴퓨터 프로젝트에서도 파이썬이 주요 프로그래밍 언어로 채택되었다.
파이썬은 마이크로소프트, 애플, 구글, 야후!, 유튜브 등의 대기업과 NASA, 일본의 고에너지 가속기 연구기구[181] 등 연구기관에서도 널리 사용되고 있다. 특히, 노키아에서는 S60 시리즈에서 파이썬 애플리케이션을 실행할 수 있다.[180]
8. 1. 주요 활용 분야
파이썬은 웹 개발, 데이터 분석, 과학 컴퓨팅, 인공지능, 머신 러닝, 자연어 처리, 스크립트 언어 등 다양한 분야에서 활용된다.
웹 개발: 아파치 웹 서버용 mod_wsgi영어를 통해 웹 애플리케이션의 스크립트 언어로 사용될 수 있다. 웹 서버 게이트웨이 인터페이스를 통해 표준 API를 사용하여 개발을 용이하게 한다. Django, Pylons, Pyramid, TurboGears, web2py, Tornado, Flask, Bottle 및 Zope와 같은 웹 프레임워크는 복잡한 애플리케이션의 설계 및 유지 관리를 지원한다. Pyjs와 IronPython은 Ajax 기반 애플리케이션의 클라이언트 측 개발에 사용될 수 있다. SQLAlchemy는 관계형 데이터베이스에 대한 데이터 매퍼 패턴으로 사용될 수 있다.
데이터 분석 및 과학 컴퓨팅:NumPy, SciPy 및 Matplotlib과 같은 라이브러리를 통해 과학 컴퓨팅에 효과적으로 사용될 수 있다.[138][139] Biopython 및 Astropy와 같은 특수 라이브러리는 특정 분야의 기능을 제공한다. SageMath는 파이썬으로 프로그래밍할 수 있는 노트북 인터페이스를 갖춘 컴퓨터 대수 시스템으로, 대수학, 조합론, 수치 수학, 수론 및 미적분학을 포함한 다양한 수학 분야를 다룬다.[140]OpenCV는 컴퓨터 비전 및 이미지 처리를 위한 파이썬 바인딩을 제공한다.[141]
인공지능 및 머신 러닝: TensorFlow, Keras, Pytorch, scikit-learn과 같은 라이브러리를 통해 인공지능 및 머신 러닝 프로젝트에 일반적으로 사용된다.[142][143][144][145][146]
자연어 처리: 모듈식 아키텍처, 단순 구문 및 풍부한 텍스트 처리 도구를 갖춘 스크립트 언어인 파이썬은 자연어 처리에 자주 사용된다.
스크립트 언어: Abaqus와 같은 유한 요소법 소프트웨어, FreeCAD와 같은 3D 파라메트릭 모델러, 3ds Max, Blender, Cinema 4D, Lightwave, Houdini, Maya, modo, MotionBuilder, Softimage, 비주얼 효과 합성기 Nuke, GIMP와 같은 2D 이미지 프로그램,[152] Inkscape, Scribus 및 Paint Shop Pro, 악보 프로그램 scorewriter 및 capella 등 다양한 소프트웨어에 스크립트 언어로 포함되었다.
기타:정보 보안 산업에서 익스플로잇 개발에 사용된다. One Laptop per Child XO의 Sugar 소프트웨어, Raspberry Pi 싱글 보드 컴퓨터 프로젝트, LibreOffice 등에도 사용된다.
JetBrains와 파이썬 소프트웨어 재단의 공동 조사에 따르면, 2017년 10월 현재 파이썬의 가장 주요한 용도는 데이터 과학(27%, 그 중 18%는 데이터 분석, 9%는 기계 학습)이었다.[203]
잉크스케이프, 페인트샵 프로, 문명 IV, 오토데스크 마야, Blender 3D, 카카오톡, 야후, 구글, 유튜브, 미국항공우주국(NASA), 미국 해양대기청(NOAA), 카카오 등 여러 기업 및 기관에서 파이썬을 활용하고 있다.[231] 이들은 파이썬을 사용하여 서비스를 개발하거나 내부 시스템을 운영한다. 특히, 카카오는 한국 기업으로, 카카오톡을 비롯한 다양한 서비스에 파이썬을 적극적으로 활용하고 있다.
9. 실행 속도 향상 기법
파이썬은 기본적으로 인터프리터 위에서 실행되도록 설계되었지만, 실행 속도를 향상시키기 위한 다양한 기법들이 존재한다.
저스트 인 타임 컴파일러(JIT): Psyco, PyPy는 파이썬 코드를 실행 시점에 기계어로 컴파일하여 실행 속도를 높인다.
외부 함수 호출 라이브러리: ctypes를 사용하면 C 언어 등으로 작성된 외부 함수를 호출하여 성능을 향상시킬 수 있다.
파이썬 모듈 생성 언어: 사이썬(Cython), Pyrex는 파이썬 코드를 C 언어 모듈로 변환하여 실행 속도를 높인다.
래퍼 생성 유틸리티: SWIG, SIP 등을 사용하면 C/C++ 등으로 작성된 코드를 파이썬에서 사용할 수 있도록 래퍼(Wrapper)를 생성하여 성능을 개선할 수 있다.
수치 연산 라이브러리: NumPy는 수치 연산에 최적화된 라이브러리로, 과학, 공학 분야에서 빠른 연산을 가능하게 한다.
병렬 처리 모듈: 다중 처리 모듈을 활용하여 여러 프로세스를 동시에 실행시켜 작업 속도를 향상시킬 수 있다.
기타: PyInline, Weave 등의 도구들도 실행 속도 향상에 기여할 수 있다.
EuroSciPy '13에서는 비수치적(조합론적) 작업 부하에 대한 다양한 파이썬 구현의 성능 비교가 발표되었다.[116] 더 컴퓨터 랭귀지 벤치마크 게임(The Computer Language Benchmarks Game)에서도 다른 프로그래밍 언어와 비교한 파이썬의 성능을 벤치마킹한 결과를 확인할 수 있다.[117]
표준 데스크톱 통합 개발 환경 외에도 과학 및 수학 관련 프로그램을 개발하기 위한 웹 브라우저 기반 IDE인 SageMath, 브라우저 기반 IDE 및 호스팅 환경인 PythonAnywhere, 과학 컴퓨팅을 강조하는 상용 IDE인 Canopy IDE가 있다.[85]
11. 비평
파이썬은 들여쓰기가 비정규적이고 자동화가 불가능하다는 비평을 받아왔다.[237] 또한, 공백의 양에 따라 코드의 의미가 달라질 수 있다. 들여쓰기에만 의존하는 것은 감지하기 어려운 논리적 버그를 유발할 수 있어 잠재적으로 위험하다.[238]
12. 빌드
파이썬은 범용 빌드 시스템 및 크로스 플랫폼 응용 소프트웨어 개발에 유용한 자원으로 활용되며, 많은 컴퓨터 엔지니어들은 파이썬의 지속적인 발전을 긍정적으로 평가하고 있다. 이는 파이썬이 여러 컴퓨터 과학 분야에서 문법의 가독성이 좋고 모듈 분리 및 재결합이 용이하여 활용 범위가 넓기 때문이다.[239][240][241]
13. 라이브러리
파이썬은 "배터리 포함(Battery Included)" 철학을 바탕으로 프로그래머가 즉시 사용할 수 있는 풍부한 표준 라이브러리를 제공한다. 이는 파이썬의 큰 강점으로 꼽힌다. 표준 라이브러리는 다음과 같은 기능을 포함한다.
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.