본문 바로가기
  • ANALOG CODE
  • AnalogCode
개발

Python 한번에 배우기 - 필수 문법 요약 정리

by 아날로그코더 2024. 1. 23.
반응형

이미 프로그래밍의 기초를 알고 있고 여러 프로그래밍 언어에 익숙한 사람들을 위해 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 안에 계층 구조를 가지는 패키지를 만들 수 있다.

 

반응형

댓글