πŸ“š μŠ€ν„°λ””/파이썬 μŠ€ν„°λ”” κ°•μ˜μžλ£Œ

[1νŒ€/ν•œκ·œλ¦Ό] 5μ°¨μ‹œ 파이썬 μŠ€ν„°λ”” - ν•¨μˆ˜

onegyul 2023. 4. 6. 14:36

5μ°¨μ‹œ_ν•¨μˆ˜_κ°•μ˜μ•ˆ.pdf
0.62MB
5μ°¨μ‹œ_ν•¨μˆ˜_과제.pdf
0.13MB

5μ°¨μ‹œ κ°•μ˜ μ£Όμ œλŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

01. ν•¨μˆ˜ 기초

μ—¬λŸ¬ λͺ…이 ν”„λ‘œκ·Έλž¨μ„ ν•¨κ»˜ κ°œλ°œν•  λ•Œ, μš°λ¦¬λŠ” 일반적으둜 νŒ€μ›λ“€μ΄ 각자 ν•΄μ•Ό ν•  뢀뢄을 λ‚˜λˆ μ„œ μ½”λ”©ν•œ λ‹€μŒ ν•©μΉ˜λŠ” λ°©μ‹μœΌλ‘œ ν•œλ‹€. κ·Έλ ‡λ‹€λ©΄ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€ λ•Œ μž‘μ„±ν•΄μ•Ό ν•˜λŠ” 뢀뢄을 λ‚˜λˆ„λŠ” λ°©λ²•μ—λŠ” μ–΄λ–€ 것이 μžˆμ„κΉŒ?

νŒŒμ΄μ¬μ—μ„œλŠ” 이λ₯Ό μœ„ν•΄ ν•¨μˆ˜, 객체, λͺ¨λ“ˆμ„ μ œκ³΅ν•œλ‹€. μ΄λ²ˆμ£Όμ—λŠ” ν•¨μˆ˜μ˜ κ°œλ…μ— λŒ€ν•΄ 배우고, λ‚˜μ€‘μ— 객체와 λͺ¨λ“ˆ(8,9μ£Όμ°¨)에 λŒ€ν•œ κ°œλ…μ„ λ°°μ›Œλ³΄μž.

1) ν•¨μˆ˜μ˜ κ°œλ…κ³Ό μž₯점

  • ν•¨μˆ˜ : ‘μ–΄λ–€ 일을 μˆ˜ν–‰ν•˜λŠ” μ½”λ“œμ˜ 덩어리, λ˜λŠ” μ½”λ“œμ˜ 묢음’
  • ν•¨μˆ˜μ˜ μž₯점
    • ν•„μš”ν•  λ•Œλ§ˆλ‹€ 호좜 κ°€λŠ₯ : 반볡적으둜 μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ” 업무λ₯Ό ν•  λ•Œ!
    • 논리적인 λ‹¨μœ„λ‘œ λΆ„ν•  κ°€λŠ₯ : κ°„λ‹¨νžˆ λ„ν˜•μ„ κ³„μ‚°ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ—μ„œλ„ κ³±μ…ˆμ„ ν•˜λŠ” μ½”λ“œ, λ§μ…ˆμ„ ν•˜λŠ” μ½”λ“œ, λ‚˜λˆ—μ…ˆμ„ ν•˜λŠ” μ½”λ“œ λ“±μœΌλ‘œ 뢄할이 κ°€λŠ₯ν•˜λ‹€!
    • μ½”λ“œμ˜ μΊ‘μŠν™” : μΊ‘μŠν™”λŠ” ν•¨μˆ˜μ˜ μΈν„°νŽ˜μ΄μŠ€λ§Œ 잘 μ •μ˜(μ½”λ“œμ— μž…λ ₯λ˜λŠ” inputκ°’κ³Ό output값을 λͺ…ν™•νžˆ ν•˜λŠ” 것)ν•˜λ©΄ λ‹€λ₯Έ μ‚¬λžŒμ΄ μžμ‹ μ˜ μ½”λ“œλ₯Ό μ‰½κ²Œ κ°€μ Έλ‹€ μ‚¬μš©ν•  수 μžˆλŠ” νŠΉμ§•μ΄ 있음.

2) ν•¨μˆ˜μ˜ μ„ μ–Έ

  • def ν•¨μˆ˜ 이름 (λ§€κ°œλ³€μˆ˜ #1 …): λͺ…λ Ήλ¬Έ1 λͺ…λ Ήλ¬Έ2 return <λ°˜ν™˜κ°’>
  • def : ‘definition’의 μ€„μž„λ§, ‘ν•¨μˆ˜ μ •μ˜λ₯Ό μ‹œμž‘ν•œλ‹€’λŠ” 의미
  • ν•¨μˆ˜ 이름 : 개발자 λ§ˆμŒλŒ€λ‘œ μ§€μ •ν•˜μ§€λ§Œ 일반적으둜 κ·œμΉ™μ„ μ‚¬μš©ν•¨.
    • μ†Œλ¬Έμžλ‘œ μž…λ ₯ν•œλ‹€.
    • 띄어쓰기λ₯Ό ν•  κ²½μš°μ— _ 기호λ₯Ό μ‚¬μš©ν•œλ‹€.
    • μž‘μ—…μ„ λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ 동사와 λͺ…사λ₯Ό ν•¨κ»˜ μ‚¬μš©ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.
    • 외뢀에 κ³΅κ°œν•˜λŠ” ν•¨μˆ˜μΌ 경우 μ€„μž„λ§μ„ μ‚¬μš©ν•˜μ§€ μ•Šκ³  짧고 λͺ…λ£Œν•œ μ΄λ¦„μœΌλ‘œ μ •ν•œλ‹€.
  • λ§€κ°œλ³€μˆ˜(parameter) : ν•¨μˆ˜μ—μ„œ μž…λ ₯κ°’μœΌλ‘œ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜λ₯Ό 의미. 1개 이상 값을 적을 수 있음.
  • λͺ…λ Ήλ¬Έ : λ“€μ—¬μ“°κΈ°ν•œ ν›„ μ½”λ“œ μž…λ ₯ν•˜κΈ°! if, forλ¬Έ λ“±μ˜ μ œμ–΄λ¬Έμ„ μ‚¬μš©ν•˜κ±°λ‚˜, κ³ κΈ‰ ν”„λ‘œκ·Έλž˜λ° κΈ°λ²•μœΌλ‘œ ν•¨μˆ˜ μ•ˆμ— ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ°λ„ 함.
def calculate_rectangle_area(x, y):
		return x * y
  • ν•¨μˆ˜ 이름은 calculate_rectangle_area 이닀.
  • x, y 2개의 λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλ‹€.
  • x, yλ₯Ό κ³±ν•œ 값을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€. (return : 값을 λ°˜ν™˜ν•œλ‹€λŠ” 뜻)

3) ν•¨μˆ˜μ˜ μ‹€ν–‰ μˆœμ„œ

def calculate_rectangle_area(x, y):
		return x * y

rectangle_x = 10
rectangle_y = 20
print("μ‚¬κ°ν˜• x의 길이:", rectangle_x)
print("μ‚¬κ°ν˜• y의 길이:", rectangle_y)

# 넓이λ₯Ό κ΅¬ν•˜λŠ” ν•¨μˆ˜ 호좜
print("μ‚¬κ°ν˜•μ˜ 넓이:", calculate_rectangle_area(rectangle_x, rectangle_y))

# 좜λ ₯ κ²°κ³Ό
μ‚¬κ°ν˜• x의 길이: 10
μ‚¬κ°ν˜• y의 길이: 20
μ‚¬κ°ν˜•μ˜ 넓이: 200
  • ν•¨μˆ˜κ°€ μ •μ˜λœ def 뢀뢄은 μ‹€ν–‰λ˜μ§€ μ•ŠμŒ. 단지 μ •μ˜λ§Œ ν•˜λŠ” 것.
    μ‹€μ œλ‘œλŠ” ν•΄λ‹Ή μ½”λ“œλ₯Ό λ©”λͺ¨λ¦¬μ— μ—…λ‘œλ“œν•΄μ„œ λ‹€λ₯Έ μ½”λ“œλ₯Ό ν˜ΈμΆœν•΄ μ‚¬μš©ν•  수 μžˆλ„λ‘ μ€€λΉ„ 과정을 κ±°μΉ¨.
  • ν•¨μˆ˜κ°€ μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ” λͺ…λ Ή μ‹€ν–‰ν•˜κΈ°
    ν•¨μˆ˜ 호좜 ν›„ λ³€μˆ˜μ— ν• λ‹Ήλœ 값이 ν•¨μˆ˜μ— μž…λ ₯값이 되고 μ½”λ“œ return x * y에 μ˜ν•΄ λ°˜ν™˜κ°’ 200이 좜λ ₯됨.

4) ν”„λ‘œκ·Έλž˜λ°μ˜ ν•¨μˆ˜μ™€ μˆ˜ν•™μ˜ ν•¨μˆ˜

  • f(x) = 2x+7, g(x) = x² 이고 x = 2 일 λ•Œ f(x) + g(x) + f(g(x)) + g(f(x)) 의 값은?
    f(2) = 11, g(2) = 4, f(g(x)) = 15, g(f(x)) = 121 → 11 + 4 + 15 + 121 = 151
def f(x):
		return 2 * x + 7
def g(x):
		return x ** 2
x = 2
print(f(x) + g(x) + f(g(x)) + g(f(x)))  # 151 좜λ ₯

λ§€κ°œλ³€μˆ˜(parameter)와 인수(argument)

def f(x):
		 return 2 * x + 7

print(f(2))  # 11 좜λ ₯

xλ₯Ό λ§€κ°œλ³€μˆ˜λΌκ³  ν•˜κ³ , μΈμˆ˜λŠ” μ‹€μ œ λ§€κ°œλ³€μˆ˜μ— λŒ€μž…λ˜λŠ” 값을 λœ»ν•˜λ―€λ‘œ 2κ°€ μΈμˆ˜μ— 해당함.

5) ν•¨μˆ˜μ˜ ν˜•νƒœ

  • λ§€κ°œλ³€μˆ˜μ™€ λ°˜ν™˜κ°’μ˜ μœ λ¬΄μ— 따라 λ„€ 가지 ν˜•νƒœλ‘œ ꡬ뢄할 수 있음.
    • λ°˜ν™˜κ°’x, λ§€κ°œλ³€μˆ˜x : ν•¨μˆ˜ λ‚΄λΆ€ λͺ…λ Ήλ¬Έλ§Œ μˆ˜ν–‰
    • λ°˜ν™˜κ°’x, λ§€κ°œλ³€μˆ˜o : λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ…λ Ήλ¬Έλ§Œ μˆ˜ν–‰
    • λ°˜ν™˜κ°’o, λ§€κ°œλ³€μˆ˜x : λ§€κ°œλ³€μˆ˜ 없이 λͺ…령문을 μˆ˜ν–‰ν•œ ν›„ κ²°κ³Όκ°’ λ°˜ν™˜
    • λ°˜ν™˜κ°’o, λ§€κ°œλ³€μˆ˜o : λ°°κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ…령문을 μˆ˜ν–‰ν•œ ν›„ κ²°κ³Όκ°’ λ°˜ν™˜
def a_rectangle_area():  # λ§€κ°œλ³€μˆ˜ x, λ°˜ν™˜κ°’ x
		print(5 * 7)
def b_rectangle_area(x, y):  # λ§€κ°œλ³€μˆ˜ o, λ°˜ν™˜κ°’ x
		print(x * y)
def c_rectangle_area():  # λ§€κ°œλ³€μˆ˜ x, λ°˜ν™˜κ°’ o
		return(5 * 7)
def d_rectangle_area(x, y):  # λ§€κ°œλ³€μˆ˜ o, λ°˜ν™˜κ°’ o
		return(x * y)

a_rectangle_area()
b_rectangle_area(5, 7)
print(c_rectangle_area())
print(d_rectangle_area(5, 7))

# 좜λ ₯κ²°κ³Ό
35
35
35
35
  • λ§€κ°œλ³€μˆ˜ x, λ°˜ν™˜κ°’ x : ν•¨μˆ˜ μžμ²΄λŠ” none값을 κ°€μ§€μ§€λ§Œ print(5 *7)둜 인해 35 좜λ ₯됨.
  • λ§€κ°œλ³€μˆ˜ o, λ°˜ν™˜κ°’ x : b_rectangle_area(5, 7)이라고 μ‹€ν–‰μ‹œμΌœμ•Ό 35κ°€ 좜λ ₯λ˜λŠ” 것이지 b_rectangle_area(5, 7) μžμ²΄κ°€ 35둜 μΉ˜ν™˜λ˜λŠ” 것은 μ•„λ‹˜. λ°˜ν™˜μ΄ μ—†μœΌλ©΄ ν•΄λ‹Ή ν•¨μˆ˜λŠ” none으둜 μΉ˜ν™˜.
  • λ§€κ°œλ³€μˆ˜ x, λ°˜ν™˜κ°’ o / λ§€κ°œλ³€μˆ˜ o, λ°˜ν™˜κ°’ o : ν•¨μˆ˜ μ•ˆμ—μ„œ print( ) ν•¨μˆ˜λ₯Ό μˆ˜ν–‰μ‹œν‚€λŠ” 것이 μ•„λ‹Œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ print( ) ν•¨μˆ˜λ₯Ό μ΄μš©ν•¨. return문으둜 인해 35둜 μΉ˜ν™˜λ˜λŠ” 것. return이 μžˆλŠ” 경우(ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μ΄ μžˆλŠ” 경우) κ·Έ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” κ³³μ—μ„œ ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μ„ λ³€μˆ˜μ— ν• λ‹Ήν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것이 κ°€λŠ₯함.

02. ν•¨μˆ˜ 심화

1) ν•¨μˆ˜μ˜ 호좜 방식

def f(x):
		y = x
		x = 5
		return y * y

x = 3
print(f(x))
print(x)

# 좜λ ₯κ²°κ³Ό
9
3
  •  ν•¨μˆ˜κ°€ λ³€μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” 방식
    • 값에 μ˜ν•œ 호좜(call by value) : ν•¨μˆ˜μ— 인수λ₯Ό λ„˜κΈΈ λ•Œ κ°’λ§Œ λ„˜κΉ€, ν•¨μˆ˜ λ‚΄λΆ€μ˜ μΈμˆ˜κ°’ λ³€κ²½ μ‹œ 호좜된 λ³€μˆ˜μ— 영ν–₯을 주지 μ•ŠμŒ
    • μ°Έμ‘° 호좜(call by reference) : ν•¨μˆ˜μ— 인수λ₯Ό λ„˜κΈΈ λ•Œ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό λ„˜κΉ€, ν•¨μˆ˜ λ‚΄λΆ€μ˜ μΈμˆ˜κ°’ λ³€κ²½ μ‹œ 호좜된 λ³€μˆ˜κ°’λ„ 변경됨
  • 객체의 μ£Όμ†Œκ°€ ν•¨μˆ˜λ‘œ λ„˜μ–΄κ°„λ‹€λŠ” 뜻의 ‘객체 호좜’(call by object reference) 방식을 μ‚¬μš©ν•¨.
    객체의 μ£Όμ†Œλ₯Ό ν•¨μˆ˜λ‘œ λ„˜κΈ°κΈ° λ•Œλ¬Έμ— μ „λ‹¬λœ 객체의 값에 변경이 μžˆμ„ 경우 영ν–₯이 있음.
def spam(eggs):
		eggs.append(1)  # κΈ°μ‘΄ 객체의 μ£Όμ†Œκ°’μ— [1] μΆ”κ°€
		eggs = [2, 3]  # μƒˆλ‘œμš΄ 객체 생성

ham = [0]
spam(ham)
print(ham)

# 좜λ ₯ κ²°κ³Ό
[0, 1]

2) λ³€μˆ˜μ˜ μ‚¬μš© λ²”μœ„

  • scoping rule : λ³€μˆ˜κ°€ μ½”λ“œμ—μ„œ μ‚¬μš©λ˜λŠ” λ²”μœ„
    • 지역 λ³€μˆ˜(local variable) : ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©
    • μ „μ—­ λ³€μˆ˜(global variable) : ν”„λ‘œκ·Έλž¨ μ „μ²΄μ—μ„œ μ‚¬μš©
def test(t):
		print(x)
		t = 20
		print("In Function:", t)

x = 10
test(x)
print("In Main:", x)
print("In Main:", t)

# 좜λ ₯ κ²°κ³Ό
10
In Function: 20
In Main: 10
Traceback (most recent call last):
		File "scoping_rule.py", line 9, in <module>
				print("In Main:", t)
NameError: name 't' is not defined
def f():
		s = "I love London!"
		print(s)

s = "I love Paris"
f()
print(s)

# 좜λ ₯ κ²°κ³Ό
I love London!
I love Paris!
def f():
		global s
		s = "I love London!"
		print(s)

s = "I love Paris!"
f()
print(s)

# 좜λ ₯ κ²°κ³Ό
I love London!
I love London!
def caculate(x, y):
		total = x + y
		print("In Function")
		print("a:", str(a), "b:", str(b), "a + b:", str(a + b), "total:", str(total))
		return total

a = 5
b = 7
total = 0
print("In Program -1")
print("a:", str(a), "b:", str(b), "a + b:", str(a + b))

sum = calculate(a, b)
print("After Calculation")
print("Total:", str(total), "Sum:", str(sum))

3) μž¬κ·€ ν•¨μˆ˜

  • μž¬κ·€ ν•¨μˆ˜ : 자기 μžμ‹ μ„ λ‹€μ‹œ ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜
    μž¬κ·€μ μ΄λΌλŠ” ν‘œν˜„μ€ μžμ‹ μ„ μ΄μš©ν•΄ λ‹€λ₯Έ 것을 μ •μ˜ν•œλ‹€λŠ” λœ»μž„.
    μž¬κ·€ ν•¨μˆ˜λŠ” μˆ˜ν•™μ˜ 점화식과 같은 ν˜•νƒœ.
def factorial(n):
		if n == 1:
				return 1
		else:
				return n * factorial(n - 1)

print(factorial(int(input("Input Number for Factorial Calculation:"))))

# 좜λ ₯ κ²°κ³Ό
Input Number for Factorial Calculation: 5
120
  • factorial( ) ν•¨μˆ˜λŠ” nμ΄λΌλŠ” λ³€μˆ˜λ₯Ό μž…λ ₯ λ§€κ°œλ³€μˆ˜λ‘œ λ„˜κ²¨λ°›μ€ ν›„ n == 1이 아닐 λ•ŒκΉŒμ§€ μž…λ ₯된 nκ³Ό n-1을 μž…λ ₯κ°’μœΌλ‘œ λ‹€μ‹œ factorial( ) ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ λ°˜ν™˜λœ κ°’κ³Ό 곱함.
  • factorial을 κ΅¬ν•˜λŠ” ν•¨μˆ˜λŠ” forλ¬Έμ΄λ‚˜ whileλ¬ΈμœΌλ‘œλ„ ν‘œν˜„μ΄ κ°€λŠ₯함. μž¬κ·€ ν•¨μˆ˜μ˜ κΈ°λ³Έ ꡬ쑰가 μ’…λ£Œ 쑰건, 단계별 λ°˜ν™˜μœΌλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμœΌλ―€λ‘œ 크게 λ³€κ²½ 없이 μ‚¬μš©μ΄ κ°€λŠ₯함. λ°˜λ³΅λ¬Έμ—μ„œλ„ λ§ˆμ°¬κ°€μ§€λ‘œ μ’…λ£Œ 쑰건과 λ°˜λ³΅λ¬Έλ§ˆλ‹€ λ™μΌν•œ 연산이 μ§„ν–‰λ˜κΈ° λ•Œλ¬Έ.
  • μž¬κ·€ ν•¨μˆ˜λŠ” κ³ κΈ‰ ν”„λ‘œκ·Έλž˜λ¨Έλ‘œ 갈수둝 μž¬κ·€μ μœΌλ‘œ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ„ 자주 μ ‘ν•˜κ²Œ λ˜λ―€λ‘œ κ°œλ…μ μœΌλ‘œ 잘 μ΄ν•΄ν•˜κ³  μžˆμ–΄μ•Ό 함.

03. ν•¨μˆ˜μ˜ 인수

1) ν‚€μ›Œλ“œ 인수

  • ν•¨μˆ˜μ˜ μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ§€μ •ν•œ λ§€κ°œλ³€μˆ˜μ˜ λ³€μˆ˜λͺ…을 μ‚¬μš©ν•˜μ—¬ ν•¨μˆ˜μ˜ 인수λ₯Ό μ§€μ •ν•˜λŠ” 방법
def print_something(my_name, your_name):
		print("Hello {0}, My name is {1}".format(your_name, my_name))

print_something("Freshman","DSOB")
print_something(your_name = "DSOB", my_name = "Freshman")

# 좜λ ₯ κ²°κ³Ό
Hello DSOB, My name is Freshman
Hello DSOB, My name is Freshman
  • print_something( ) ν•¨μˆ˜λŠ” (my_name, your_name)μ΄λΌλŠ” μž…λ ₯ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 가짐.
  • 두 ν•¨μˆ˜μ— λŒ€ν•œ 2가지 호좜 μ½”λ“œμ˜ μ‹€ν–‰ κ²°κ³Όκ°€ λ™μΌν•˜κ²Œ 좜λ ₯됨.

2) λ””ν΄νŠΈ 인수

  • λ³„λ„μ˜ μΈμˆ˜κ°’μ΄ μž…λ ₯λ˜μ§€ μ•Šμ„ λ•Œ μΈν„°νŽ˜μ΄μŠ€ μ„ μ–Έμ—μ„œ μ§€μ •ν•œ μ΄ˆκΉƒκ°’μ„ μ‚¬μš©ν•˜λŠ” 방법
  • λ§€κ°œλ³€μˆ˜μ— 기본값을 μ§€μ •ν•˜μ—¬ μ‚¬μš©ν•˜κ³ , μ•„λ¬΄λŸ° 값도 인수둜 λ„˜μ–΄κ°€μ§€ μ•Šμ„ λ•Œ μ§€μ •λœ 기본값을 μ‚¬μš©ν•˜λŠ” 방식
def print_something_2(my_name, your_name = "DSOB"):
    print("Hello {0}, My name is {1}".format(your_name, my_name))

print_something_2("Freshman", "DSOB")
print_something_2("Freshman")

# 좜λ ₯ κ²°κ³Ό
Hello DSOB, My name is Freshman
Hello DSOB, My name is Freshman
  • λ””ν΄νŠΈ 인수λ₯Ό μ‚¬μš©ν•  λ•Œ 보톡 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” μ‚¬λžŒμ΄ μ΄ˆκΉƒκ°’μ„ μž…λ ₯ν•΄μ£Όμ–΄μ•Ό ν•  λ•Œκ°€ 있음.

3) κ°€λ³€ 인수

  • ν•¨μˆ˜μ˜ μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ§€μ •ν•œ λ³€μˆ˜ μ΄μ™Έμ˜ μΆ”κ°€ λ³€μˆ˜λ₯Ό ν•¨μˆ˜μ— μž…λ ₯ν•  수 μžˆλ„λ‘ μ§€μ›ν•˜λŠ” 방법
def asterisk_test(a, b, *args):
    return a + b + sum(args)

print(asterisk_test(1, 2, 3, 4, 5))

# 좜λ ₯ κ²°κ³Ό
15
  • *args : κ°€λ³€ 인수
def asterisk_test(a, b, *args):
    print(args)

print(asterisk_test(1, 2, 3, 4, 5))

# 좜λ ₯ κ²°κ³Ό
(3, 4, 5)
None
  • κ΄„ν˜Έλ‘œ λ¬Άμ—¬ 좜λ ₯λ˜λŠ” μžλ£Œν˜•μ„ νŠœν”Œ(tuple) μžλ£Œν˜•μ΄λΌκ³  함.
    리슀트 μžλ£Œν˜•μ²˜λŸΌ 인덱슀둜 μ ‘κ·Όν•  수 μžˆλŠ” μžλ£Œν˜•μ΄λΌκ³ λ§Œ μ•Œμ•„λ‘λ©΄ 됨.
  • κ°€λ³€μΈμˆ˜ *λŠ” λ°˜λ“œμ‹œ 일반적인 ν‚€μ›Œλ“œ μΈμˆ˜μ— λŒ€ν•œ 선언이 λͺ¨λ‘ λλ‚œ ν›„ λ§ˆμ§€λ§‰μ— μ„ μ–Έλ˜μ–΄μ•Ό 함.
  • νŠœν”Œ ν˜•νƒœλ‘œ ν•¨μˆ˜ μ•ˆμ—μ„œ μ‚¬μš©λ˜λ―€λ‘œ 인덱슀λ₯Ό μ‚¬μš©ν•˜μ—¬ args[0], args[1] λ“±μ˜ ν˜•νƒœλ‘œ λ³€μˆ˜μ— μ ‘κ·Όν•  수 있음.
def asterisk_test_2(*args):
    x, y, *z = args  # μ–ΈνŒ¨ν‚Ή
    return x, y, z

print(asterisk_test_2(3, 4, 5))

# 좜λ ₯ κ²°κ³Ό
(3, 4, [5])
  • μž…λ ₯받은 κ°€λ³€ 인수의 개수λ₯Ό μ •ν™•νžˆ μ•ˆλ‹€λ©΄ μ–ΈνŒ¨ν‚Ήμ„ ν•  수 있음.
    λ§Œμ•½ *zκ°€ μ•„λ‹Œ μƒνƒœλ‘œ asterisk_test_2(3, 4, 5, 10, 20)으둜 λ³€κ²½ν•˜μ—¬ μ‹€ν–‰ν•œλ‹€λ©΄ 였λ₯˜κ°€ λ°œμƒν•¨.
    μ–ΈνŒ¨ν‚Ήμ˜ κ°œμˆ˜κ°€ λ§žμ§€ μ•ŠκΈ° λ•Œλ¬Έ.
def asterisk_test_2(*args):
    x, y, *z = args
    return x, y, z

print(asterisk_test_2(3, 4, 5, 10, 20))

# 좜λ ₯ κ²°κ³Ό
(3, 4, [5, 10, 20])

4) ν‚€μ›Œλ“œ κ°€λ³€ 인수

  • λ§€κ°œλ³€μˆ˜μ˜ 이름을 λ”°λ‘œ μ§€μ •ν•˜μ§€ μ•Šκ³  μž…λ ₯ν•˜λŠ” 방법
  • κ°€λ³€ μΈμˆ˜λŠ” λ³€μˆ˜μ˜ μˆœμ„œλŒ€λ‘œ νŠœν”Œ ν˜•νƒœλ‘œ μ €μž₯됨.
    μ‚¬μš©μ€ κ°„λ‹¨ν•˜μ§€λ§Œ λ³€μˆ˜μ˜ 이름을 지정할 수 μ—†λ‹€λŠ” 단점이 있음.
    이λ₯Ό λ³΄μ™„ν•œ 것이 ν‚€μ›Œλ“œ κ°€λ³€ 인수 이닀.
    λ§€κ°œλ³€μˆ˜μ˜ 이름을 λ”°λ‘œ μ§€μ •ν•˜μ§€ μ•Šκ³  μž…λ ₯ν•˜λŠ” λ°©λ²•μœΌλ‘œ *을 2개 μ‚¬μš©ν•˜μ—¬ ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λ₯Ό ν‘œμ‹œν•œλ‹€.
  • μž…λ ₯된 값은 νŠœν”Œ μžλ£Œν˜•μ΄ μ•„λ‹Œ λ”•μ…”λ„ˆλ¦¬ μžλ£Œν˜•μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.
def kwargs_test(**kwargs):
    print(kwargs)
    print("First value is {first}".format(**kwargs))
    print("Second value is {second}".format(**kwargs))
    print("Third value is {third}".format(**kwargs))

kwargs_test(first=3, second=4, third=5)

# 좜λ ₯ κ²°κ³Ό
{'first': 3, 'second': 4, 'third': 5}
First value is 3
Second value is 4
Third value is 5

04. 쒋은 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 방법

1) 쒋은 μ½”λ“œμ˜ 의미

  • ν”„λ‘œκ·Έλž˜λ°μ€ νŒ€ν”Œλ ˆμ΄λ‹€. 쒋은 ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•΄ κ·œμΉ™μ΄ μžˆμ–΄μ•Όν•œλ‹€.
  • 컴퓨터가 이해할 수 μžˆλŠ” μ½”λ“œλŠ” μ–΄λŠ 정도 μ‹€λ ₯이 되면 λ§Œλ“€ 수 μžˆμ§€λ§Œ, 쒋은 ν”„λ‘œκ·Έλž˜λ¨Έκ°€ 되기 μœ„ν•΄μ„œλŠ” μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” ν”„λ‘œκ·Έλž¨ μ½”λ“œλ₯Ό λ§Œλ“€μ–΄μ•Ό ν•œλ‹€.
    λ‹€λ₯Έ μ‚¬λžŒμ΄ λ‚΄κ°€ μž‘μ„±ν•œ μ½”λ“œλ₯Ό ꡉμž₯히 μ‰½κ²Œ 이해할 수 μžˆλ„λ‘ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄μ•Ό ν•œλ‹€.

2) μ½”λ”© κ·œμΉ™

  • λ“€μ—¬μ“°κΈ°λŠ” 4슀페이슀
  • ν•œ 쀄은 μ΅œλŒ€ 79μžκΉŒμ§€
  • λΆˆν•„μš”ν•œ 곡백은 μ—†μ• κΈ°
  • = μ—°μ‚°μžλŠ” 1μΉΈ 이상 λ„μš°μ§€ μ•ŠκΈ°
  • 주석은 항상 κ°±μ‹ ν•˜κ³  λΆˆν•„μš”ν•œ 주석을 μ‚­μ œν•˜κΈ°
  • μ†Œλ¬Έμž l, λŒ€λ¬Έμž O, λŒ€λ¬Έμž IλŠ” μ‚¬μš©μ„ κΈˆν•¨. (ꡬ뢄이 어렀움)
  • ν•¨μˆ˜λͺ…은 μ†Œλ¬Έμžλ‘œ κ΅¬μ„±ν•˜κ³ , ν•„μš”μ‹œ λ°‘μ€„λ‘œ κ΅¬λΆ„ν•˜κΈ°

3) ν•¨μˆ˜ 개발 κ°€μ΄λ“œλΌμΈ

  • ν•¨μˆ˜ 이름
    • ν•¨μˆ˜ λ‚΄μš©μ€ κ°€λŠ₯ν•˜λ©΄ 짧게 μž‘μ„±ν•  것 (쀄 수λ₯Ό 쀄일 것)
    • ν•¨μˆ˜ 이름에 ν•¨μˆ˜μ˜ μ—­ν• κ³Ό μ˜λ„λ₯Ό λͺ…ν™•νžˆ λ“œλŸ¬λ‚Ό 것
  • ν•¨μˆ˜μ˜ μ—­ν• 
    • ν•˜λ‚˜μ˜ ν•¨μˆ˜μ—λŠ” μœ μ‚¬ν•œ 역할을 ν•˜λŠ” μ½”λ“œλ§Œ ν¬ν•¨μ‹œμΌœμ•Ό 함 ν•¨μˆ˜λŠ” ν•œ 가지 역할을 λͺ…ν™•νžˆ ν•΄μ•Ό 함
  • ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•˜λŠ” 경우
    • κ³΅ν†΅μœΌλ‘œ μ‚¬μš©λ˜λŠ” μ½”λ“œλ₯Ό ν•¨μˆ˜λ‘œ λ³€ν™˜
    • λ³΅μž‘ν•œ 둜직이 μ‚¬μš©λ˜μ—ˆμ„ λ•Œ 식별 κ°€λŠ₯ν•œ μ΄λ¦„μ˜ ν•¨μˆ˜λ‘œ λ³€ν™˜
  • hello1.py, hello2.py, math1.py, math2.pyλ₯Ό μ°Έκ³ ν•˜μž.