1  2장: 파이썬 언어 기본, IPython, Jupyter 노트북

이 장에서는 파이썬의 핵심 구문과 분석 환경을 익힙니다.

2 2장: 파이썬 언어 기본, IPython, Jupyter 노트북

이 장에서는 파이썬 프로그래밍의 기초와 IPython 및 Jupyter 노트북 환경을 사용하는 방법을 다룹니다.

2.1 환경 설정

기본적인 라이브러리를 임포트하고 출력 옵션을 설정합니다.

import warnings
warnings.filterwarnings('ignore')

import numpy as np
np.random.seed(12345)
np.set_printoptions(precision=4, suppress=True)
import matplotlib.pyplot as plt
# Matplotlib 한글 폰트 설정 (macOS용)
plt.rc('font', family='AppleGothic')
plt.rc('axes', unicode_minus=False)

2.2 변수와 객체 참조

파이썬에서 변수는 객체 자체가 아니라 객체에 대한 이름(참조)입니다.

2.3 객체 지향 프로그래밍 기초

파이썬의 동적 타이핑과 객체 참조 방식을 살펴봅니다.

import numpy as np
data = [np.random.standard_normal() for i in range(7)]
data
[-0.20470765948471295,
 0.47894333805754824,
 -0.5194387150567381,
 -0.55573030434749,
 1.9657805725027142,
 1.3934058329729904,
 0.09290787674371767]
a = [1, 2, 3]
b = a
b
[1, 2, 3]
a.append(4)
b
[1, 2, 3, 4]

2.4 동적 타이핑

파이썬은 변수의 타입을 미리 선언할 필요가 없는 동적 타이핑 언어입니다.

2.5 함수와 모듈

코드의 재사용성을 높이는 함수 정의와 임포트 방법을 배웁니다.

def append_element(some_list, element):
    some_list.append(element)
data = [1, 2, 3]
append_element(data, 4)
data
[1, 2, 3, 4]

2.6 내장 객체 타입

파이썬의 주요 내장 데이터 타입과 그 특성을 살펴봅니다.

2.7 데이터 타입

정수, 실수, 문자열 등 파이썬의 기본 자료형을 확인합니다.

a = 5
type(a)
a = "foo"
type(a)
str
"5" + 5
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[9], line 1
----> 1 "5" + 5

TypeError: can only concatenate str (not "int") to str
a = 4.5
b = 2
# 문자열 포매팅, 나중에 살펴봄
print(f"a is {type(a)}, b is {type(b)}")
a / b
a is <class 'float'>, b is <class 'int'>
2.25

2.8 속성과 메서드

객체의 속성과 메서드를 확인하고 사용하는 방법을 다룹니다.

a = 5
isinstance(a, int)
True
a = 5; b = 4.5
isinstance(a, (int, float))
isinstance(b, (int, float))
True

2.9 연산자와 제어 흐름

기본적인 산술 연산, 비교 연산, 그리고 조건문과 반복문을 사용하는 방법을 학습합니다.

a = "foo"
getattr(a, "split")
<function str.split(sep=None, maxsplit=-1)>
def isiterable(obj):
    try:
        iter(obj)
        return True
    except TypeError: # 반복 가능한 객체가 아님
        return False
isiterable("문자열")
isiterable([1, 2, 3])
isiterable(5)
False
5 - 7
12 + 21.5
5 <= 2
False
a = [1, 2, 3]
b = a
c = list(a)
a is b
a is not c
True
a == c
True
a = None
a is None
True
a_list = ["foo", 2, [4, 5]]
a_list[2] = (3, 4)
a_list
['foo', 2, (3, 4)]
a_tuple = (3, 5, (4, 5))
a_tuple[1] = "four"
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[22], line 2
      1 a_tuple = (3, 5, (4, 5))
----> 2 a_tuple[1] = "four"

TypeError: 'tuple' object does not support item assignment
ival = 17239871
ival ** 6
26254519291092456596965462913230729701102721
fval = 7.243
fval2 = 6.78e-5
3 / 2
1.5
3 // 2
1
c = """
This is a longer string that
spans multiple lines
"""
c.count("\n")
3
a = "this is 문자열"
a[10] = "f"
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[29], line 2
      1 a = "this is 문자열"
----> 2 a[10] = "f"

TypeError: 'str' object does not support item assignment
b = a.replace("문자열", "더 긴 문자열")
b
'this is 더 긴 문자열'
a
'this is 문자열'
a = 5.6
s = str(a)
print(s)
5.6
s = "python"
list(s)
s[:3]
'pyt'
s = "12\\34"
print(s)
12\34
s = r"this\has\no\special\characters"
s
'this\\has\\no\\special\\characters'
a = "이것은 전반부 "
b = "그리고 이것은 후반부"
a + b
'이것은 전반부 그리고 이것은 후반부'
template = "{0:.2f} {1:s} are worth US${2:d}"
template.format(88.46, "아르헨티나 페소", 1)
'88.46 아르헨티나 페소 are worth US$1'
amount = 10
rate = 88.46
currency = "페소"
result = f"{amount} {currency} 은(는) US$의 가치가 있습니다{amount / rate}"
f"{amount} {currency} 은(는) US$의 가치가 있습니다{amount / rate:.2f}"
'10 페소 은(는) US$의 가치가 있습니다0.11'
val = "español"
val
'español'
val_utf8 = val.encode("utf-8")
val_utf8
type(val_utf8)
bytes
val_utf8.decode("utf-8")
'español'

2.10 날짜와 시간

datetime 모듈을 사용하여 날짜와 시간을 다루는 방법을 알아봅니다.

val.encode("latin1")
val.encode("utf-16")
val.encode("utf-16le")
b'e\x00s\x00p\x00a\x00\xf1\x00o\x00l\x00'
True and True
False or True
True
int(False)
int(True)
1
a = True
b = False
not a
not b
True
s = "3.14159"
fval = float(s)
type(fval)
int(fval)
bool(fval)
bool(0)
False
a = None
a is None
b = 5
b is not None
True
from datetime import datetime, date, time
dt = datetime(2011, 10, 29, 20, 30, 21)
dt.day
dt.minute
30
dt.date()
dt.time()
datetime.time(20, 30, 21)
dt.strftime("%Y-%m-%d %H:%M")
'2011-10-29 20:30'
datetime.strptime("20091031", "%Y%m%d")
datetime.datetime(2009, 10, 31, 0, 0)
dt_hour = dt.replace(minute=0, second=0)
dt_hour
datetime.datetime(2011, 10, 29, 20, 0)
dt
datetime.datetime(2011, 10, 29, 20, 30, 21)
dt2 = datetime(2011, 11, 15, 22, 30)
delta = dt2 - dt
delta
type(delta)
datetime.timedelta
dt
dt + delta
datetime.datetime(2011, 11, 15, 22, 30)
a = 5; b = 7
c = 8; d = 4
if a < b or c > d:
    print("성공")
성공
4 > 3 > 2 > 1
True
for i in range(4):
    for j in range(4):
        if j > i:
            break
        print((i, j))
(0, 0)
(1, 0)
(1, 1)
(2, 0)
(2, 1)
(2, 2)
(3, 0)
(3, 1)
(3, 2)
(3, 3)
range(10)
list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list(range(0, 20, 2))
list(range(5, 0, -1))
[5, 4, 3, 2, 1]
seq = [1, 2, 3, 4]
for i in range(len(seq)):
    print(f"element {i}: {seq[i]}")
element 0: 1
element 1: 2
element 2: 3
element 3: 4
total = 0
for i in range(100_000):
    # %는 나머지 연산자임
    if i % 3 == 0 or i % 5 == 0:
        total += i
print(total)
2333316668