이미 프로그래밍의 기초를 알고 있고 여러 프로그래밍 언어에 익숙한 사람들을 위해 Python 기본 문법을 빠르게 훑어보면서 파이썬 프로그래밍을 최대한 빠르게 시작하기 위해 필요한 기초 필수 문법을 정리하였다.
자료형부터 Class 및 예외처리 개념까지 한눈에 파악하기 쉽게 최대한 간결하게 정리하였다. 한번만 훑어보는 것만으로도 파이썬의 전반적인 기본 문법을 파악할 수 있어서 바로 코딩이 가능할 수 있을 것이다.
Python 특징
특징 | 설명 |
인터프리터 언어 | 개발시간 단축 |
모듈 | 대규모의 표준 모듈 제공 (파일, 시스템호출, 소켓, GUI) 사용자 모듈 개발 가능 |
고수준의 자료형 | 복잡한 연산을 간단한 코드로 표현가능 |
문장의 묶음이 괄호 대신 들여쓰기 방식 | 코드의 간결함 (개인적으로는 괄호방식을 선호하여 단점으로 느껴짐...) |
변수, 인자 선언 필요 없음 | 코드의 간결함 |
확장 가능 | ctypes 모듈을 사용하여 C로 만든 함수 호출 가능 성능 향상 |
자료형 (Data type)
파이썬의 컬렉션 자료형에는 리스트, 튜플과 같은 시퀀스형태와 집합, 딕셔너리와 같은 비시퀀스형태가 있다.
또한 복소수를 표현하는 자료형도 존재한다.
Type | 설명 | 예제 |
None | 값 없음 | val=None |
int | 정수 | 1, 100, 5000 |
float | 부동소수점 | 3.141592 |
complex | 복소수 | 3+2j |
bool | 불리언 | True / False |
str | 문자열 수정 불가능 |
"Hello" 'World' |
list | 순서가 있음 중복 가능 수정 가능 |
[10, 20, 30] |
tuple | 순서가 있음 중복 가능 수정 불가능 |
(10, 20, 30) |
set | 집합 순서가 없음 중복 불가능 수정 가능 |
{10, 20, 30} |
dict | 딕셔너리 key:value 형태의 값 순서 없음 key 중복 불가능 수정 가능 map과 비슷 |
{"A": 10, "B": 20, "C": 30} |
연산자 (Operator)
종류 | 연산자 | 설명 | 예제 |
산술 연산자 | +, - | 덧셈 / 뺄셈 | 1 + 1 = 2, 2 - 1 = 1 |
*, / | 곱하기 / 나누기 | 5 * 2 = 10, 10 / 2 = 5 | |
** | 제곱 | 2**3 = 8 | |
// | 정수몫 | 9//2 = 4 | |
% | 나머지 | 5 % 2 = 1 | |
비교 연산자 | == | 같다 | a == b |
!= | 같지 않다 | a != b | |
> | 크다 | a > b | |
< | 작다 | a < b | |
>= | 크거나 같다 | a >= b | |
<= | 작거나 같다 | a <= b | |
할당 연산자 | = | 할당 | a = 10 |
+= | 덧셈 후 할당 | a+=10 | |
-= | 뺄셈 후 할당 | a -= 10 | |
*= | 곱셈 후 할당 | a *= 10 | |
/= | 나눗셈 후 할당 | a /= 10 | |
**= | 제곱 연산 후 할당 | a **= 2 | |
//= | 정수몫 연산 후 할당 | a //= 5 | |
%= | 나머지 연산 후 할당 | a %= 5 | |
논리 연산자 | and | 논리 AND | a and b |
or | 논리 OR | a or b | |
not | 논리 NOT | not a | |
비트 연산자 | & | AND | a & b |
| | OR | a | b | |
^ | XOR | a ^ b | |
~ | 1의 보수 | ~a | |
<< | 왼쪽 쉬프트 | a << 2 | |
>> | 오른쪽 쉬프트 | a >> 2 |
++, -- (증감연산자)가 존재하지 않는다.
조건문
파이썬의 조건문은 if 하나이다. 사용법은 아래와 같다.
- elif는 없거나 여러개 가능하다.
- else는 없을 수도 있다.
if 조건1:
조건1이 참일 경우 할일
elif 조건2:
조건2가 참일 경우 할일
else:
위의 조건이 모두 아닌 경우
반복문
파이썬의 반복문은 for, while이 있다.
for
파이썬의 for 문은 우리가 그동안 사용하던 방식과는 조금 다르다. 리스트와 같은 시퀀스나 컬렉션를 이터레이션하도록 만드는 구조이다.
숫자 반복
for i in range(10):
print(i)
리스트 반복
user = ['A', 'B', 'C']
for name in user:
print(name)
딕셔너리 반복
a = {"name":"aaa", "age": 10}
for k,v in a.items():
print(k, v)
튜플 반복
a = (10, 20, 30)
for v in a:
print(v)
while
파이썬의 while문은 우리가 보통 사용하는 방식과 동일하다.
while 조건문:
조건문이 참일동안 수행할 문장
함수
함수정의
함수는 def 키워드를 사용하여 정의한다.
def 함수명 (매개변수):
문장
기본 인자
def func_name(param1, param2=10):
문장
# 함수호출
func_name(1)
func_name(1, 20)
키워드 인자
key=value 형식으로 인자를 전달
def func_name(param1, param2=10):
문장
# 키워드인자를 사용하여 함수 호출
func_name(param1=100)
func_name(100, param2=200)
위치 전용 매개 변수
함수 정의에서 인자에 / 를 사용하면 / 앞에 있는 인자는 위치 전용 인자로만 사용해야 한다.
# 아래 함수의 정의에서 / 앞에 있는 p1은 위치 전용 인자이다.
def f(p1, /, p2):
print(p1, p2)
f(1, 20)
f(1, p2=20)
f(p1=1, 20) # 에러: p1은 위치 전용 인자
키워드 전용 인자
함수 정의에서 인자에 * 를 사용하면 * 뒤에 있는 인자를 키워드 전용 인자로만 사용해야 한다.
# 함수 정의에서 매개변수 * 뒤에 있는 인자는 키워드 전용 인자이다.
def f(p1, *, p2):
print(p1, p2)
f(1, p2=20)
f(p1=1, p2=20)
f(1, 20) # 에러: p2는 키워드 전용인자로 사용해야한다.
f(p1=1, 20) # 에러: p2는 키워드 전용인자로 사용해야한다.
Class
파이썬에서도 객체지향 개념을 제공한다.
- 모든 클래스 멤버들은 public
- 모든 멤버 함수들은 virtual -> 자식 클래스에서 함수 재정의 가능
- 다중 상속 지원
Class 정의
# class 정의
##########################################
class Hero:
# 클래스 변수
count = 0
# 생성자
def __init__(self, name):
# 인스턴스 변수 name, power
self.name = name
self.power = 10
Hero.count += 1
# 메소드
def powerup(self):
self.power += 1
##########################################
# class 인스턴스 생성
a = Hero('AA')
b = Hero('BB')
# 인스턴스 메소드 호출
a.powerup()
# 클래스 변수 접근
print(Hero.count)
self
클래스의 메소드 정의의 첫번째 인자는 self가 들어가야 한다. self는 인스턴스 자기 자신을 의미한다. 메소드를 호출할때 자동으로 self에 인스턴스 자기 자신을 전달한다.
c++의 class에서 this 의 개념이라고 보면 이해하기 쉽다. 파이썬에서는 명시적으로 메소드의 첫번째 인자로 self를 넣어주어야 한다.
상속
# Hero Class 를 상속하여 Knight Class 정의
class Knight(Hero):
def attack(self):
pass # pass는 아무 작업도 하지 않는 코드
다중 상속
# 여러개의 BaseClass로부터 상속을 받는다.
class DerivedClass(BaseClass1, BaseClass2, BaseClass3):
문장
예외처리
실행중에 감지되는 에러들을 예외라고 하며, 이것을 어떻게 처리하는 방법은 아래와 같다.
try, except를 사용하면 된다.
try:
문장
except OSError as err:
print(err)
except Exception as err:
print(err)
else:
# 예외가 발생하지 않을 경우 실행
pass
finally:
# 모든 상황에서 실해오디는 뒷정리 동작
pass
예외 발생 raise
try:
# 예외 발생
raise ValueError
except Exception as e:
print(e)
모듈
필요한 기능별로 파일을 분리하여 모듈화가 가능하다. 그리고 import 를 사용하여 해당 모듈을 임포트하여 사용할 수 있다.
# MyModule.py
def f1:
pass
def f2:
pass
모듈 Import
import MyModule
MyModule.f1()
MyModule.f2()
모듈 Import
import MyModule as MyMod
MyMod.f1()
MyMod.f2()
모듈 Import
from MyModule import f1, f2
f1()
f2()
모듈 Import
from MyModule import f1 as func1, f2 as func2
func1()
func2()
패키지 (Package)
파이썬의 패키지는 모듈의 집합이라고 보면 된다. 여러개의 모듈들을 하나의 Namespace 안에 계층구조로 만들 수 있다. 아래 패키지 예제를 보면 바로 이해가 될 것이다.
pack이라는 패키지를 아래 폴더구조와 같이 만들었다. pack 아래에는 subpack이라는 서브패키지가 포함되어 있다.
우리는 pack이라는 namespace 계층구조에서 하위의 모듈들을 사용할 수 있도록 할 것이다.
.
├── pack/
│ ├── __init__.py
│ ├── m.py
│ └── subpack/
│ ├── __init__.py
│ └── m.py
└── main.py
아래 main.py 코드와 같이 pack이라는 패키지를 import하여 pack.subpack 과 같이 계층구조의 namespace로 사용하게 할 수있다.
# main.py
import pack
pack.m.f()
pack.subpack.m.f()
__init__.py
__init__.py는 패키지 초기화를 위한 특수한 파일이다. 패키지 폴더에 이 파일을 만들면 해당 폴더의 패키지 초기화를 하는 역할을 담당한다. 이 파일에 해당 패키지에 사용할 모듈들을 임포트해주면 된다.
pack / __init__.py
# pack / __init__.py
from . import m
from . import subpack
pack / subpack / __init__.py
# pack / subpack / __init__.py
from . import m
이런식으로 하나의 namespace 안에 계층 구조를 가지는 패키지를 만들 수 있다.
'개발' 카테고리의 다른 글
파이썬 Kivy: weakly-referenced object no longer exists 예외 상황 (0) | 2024.08.14 |
---|---|
tkinter - 파이썬 GUI 라이브러리 사용법 (0) | 2024.06.19 |
내컴퓨터에 워드프레스 설치 후 마음껏 테스트해보기 (3) | 2023.08.26 |
Nuxt3 + Vuetify SASS Variable 수정하기 (1) | 2023.06.30 |
Nuxt3에서 Quasar 사용하기 (2) | 2023.06.23 |
댓글