Python은 읽기 쉬운 문법과 풍부한 표준 라이브러리를 갖춘 범용 프로그래밍 언어이다. 자동화, 데이터 처리, 웹 서버와 과학 계산 등에 사용된다. 이 문서는 Python 3의 기본 동작을 설명하며, 실행 예제는 외부 패키지 없이 사용할 수 있다.
프로그래밍 언어 | |
|---|---|
언어 | Python · Java · JavaScript · TypeScript · Rust |
언어와 실행 환경
Python 코드의 문법과 의미를 정하는 언어 자체, 이를 실행하는 구현, 프로젝트에 설치한 패키지는 구별한다. 프로그램을 재현하려면 Python 버전과 의존 패키지, 실행 환경을 함께 알아야 한다. 같은 파일을 실행해도 필요한 패키지가 다른 환경에만 설치되어 있으면 불러오기에 실패한다.
대화형 인터프리터에서는 표현식 결과를 바로 확인할 수 있고, .py 파일에는 반복해서 실행할 코드를 저장한다. 문서에 있는 >>> 같은 대화형 프롬프트는 코드 자체가 아니다. 아래 예제는 프롬프트 없이 제시했으므로 파일이나 대화형 환경에 코드 줄을 입력하면 된다.
자료형과 이름의 의미
정수, 실수, 문자열, 리스트, 딕셔너리 같은 자료형을 제공한다. 변수 이름은 객체를 가리키며 값을 대입하면 그 이름이 가리키는 대상이 정해진다. 동적 타입 언어라는 말은 모든 값을 아무 연산에나 사용할 수 있다는 뜻이 아니다. 문자열과 정수를 더하는 식처럼 맞지 않는 연산은 오류를 일으킬 수 있다.
문자열과 리스트의 차이도 중요하다. 문자열은 불변 객체이고 리스트는 원소를 바꿀 수 있다. 두 이름이 같은 리스트를 가리키는 상황에서 한쪽 이름을 통해 원소를 추가하면 다른 쪽에서도 변화가 보인다. 단순 대입이 독립적인 깊은 복사를 만든다고 가정하지 않는다.
제어 흐름과 함수
조건문과 반복문은 입력에 따라 실행할 동작을 바꾼다. Python은 들여쓰기로 블록을 표현하므로 들여쓰기는 장식이 아니라 문법의 일부다. 함수는 입력을 매개변수로 받고 계산 결과를 반환해 재사용할 수 있는 단위를 만든다.
반복문이 필요한 모든 곳을 한 줄로 줄이는 것이 좋은 코드는 아니다. 리스트 컴프리헨션은 단순한 변환과 필터링에 적합하지만 조건과 부수 효과가 복잡해지면 일반 반복문과 함수로 의도를 드러내는 편이 낫다. 다음 예제는 비교적 단순한 필터링에 해당한다.
Python 주요 기능 |
|---|
Python 리스트 컴프리헨션 · Python 모듈 · Python 예외 처리 · Python venv · Python asyncio |
Python dataclass · Python pathlib · Python 타입 힌트 · Python unittest · Python 생성기 |
예시: 조건을 만족하는 값 집계
Python 3에서 아래 코드를 순서대로 실행한다. 점수 목록에서 60점 이상인 값만 뽑고 인원과 합계를 계산한다. 실행 결과는 [67, 91, 60], 3, 218이다. 이 예제에서는 점수가 모두 숫자라고 가정하며, 외부 입력을 읽는 프로그램이라면 자료형과 허용 범위를 별도로 검사해야 한다.
리스트 컴프리헨션의 score는 scores의 각 원소를 차례로 가리킨다. if score >= 60이 참인 원소만 새 리스트에 들어간다. 원본 scores 자체에서 낮은 점수를 삭제한 것이 아니다. len은 선택한 원소 수를, sum은 선택한 숫자의 합을 계산한다.
scores = [42, 67, 91, 60]
passed = [score for score in scores if score >= 60]
print(passed)
print(len(passed))
print(sum(passed))예시: 공유와 복사의 차이
두 번째 예제의 alias는 original과 같은 리스트를 가리키고 copied는 바깥 리스트를 새로 만든 얕은 복사다. alias에 3을 추가한 뒤 original은 [1, 2, 3]이 되고 copied는 [1, 2]로 남는다.
이 결과를 중첩 자료에도 무조건 일반화하면 안 된다. 리스트 안에 다른 리스트 같은 변경 가능한 객체가 들어 있으면 얕은 복사 후에도 내부 객체를 공유할 수 있다. 자료 구조가 어느 깊이까지 독립적이어야 하는지에 따라 복사 방법을 선택한다.
original = [1, 2]
alias = original
copied = original.copy()
alias.append(3)
print(original)
print(copied)오류 처리와 패키지 관리
문법 오류는 코드를 해석하는 단계에서 발생하고, 예외는 문법이 맞아도 실행 중에 발생할 수 있다. 예외 메시지와 발생 위치를 읽고 원인을 좁힌다. 예를 들어 정수로 바꿀 수 없는 문자열을 int에 전달하면 ValueError가 발생할 수 있다. 모든 예외를 무조건 잡고 지나가면 잘못된 결과를 정상 결과처럼 처리할 위험이 있다.
서로 다른 프로젝트가 같은 라이브러리의 서로 다른 버전을 요구하면 가상 환경으로 설치 영역을 나눌 수 있다. 가상 환경은 운영체제 전체를 분리하는 가상 머신과 다르다. 프로젝트의 의존성 정보와 Python 버전을 함께 기록해야 다른 환경에서 다시 준비하기 쉽다.
활용과 제약
작은 자동화 작업은 파일·문자열·컬렉션을 다루는 표준 라이브러리만으로도 해결할 수 있다. 웹이나 과학 계산에서는 목적에 맞는 외부 라이브러리를 사용하지만 설치한 라이브러리의 API와 버전 조건을 확인해야 한다. 코드가 짧다는 이유만으로 처리 비용이 작아지는 것은 아니다.
많은 데이터를 한 번에 리스트로 만들면 메모리가 필요하다. 필요한 자료량과 반복 횟수를 살펴보고 측정한 병목에 맞춰 알고리즘이나 처리 방식을 바꾼다. 언어 이름만으로 모든 작업의 성능을 단정하지 않는다.