📚 슀터디/파읎썬 슀터디 강의자료

[1팀/지닀읞] 5ì°šì‹œ 파읎썬 슀터디 - 핚수

알 수 없는 사용자 2023. 4. 6. 16:21

5차시_함수_가ᆌᄋᅎ자료.pdf
1.11MB
5차시_함수_과ᄌᅊ.pdf
0.14MB

chapter05 핚수

학습 목표

  • 핚수륌 선얞하는 방법, 핚수의 싀행 순서, 핚수의 4가지 형태에 대핮 알아볞닀
  • 핚수륌 혞출하는 방식곌 변수의 사용 범위에 대핮 학습하고, 재귀 핚수에 대핮 읎핎한닀
  • 핚수의 읞수읞 킀워드 읞수, 디폮튾 읞수, 가변 읞수, 킀워드 가변 읞수에 대핮 알아볞닀
  • 좋은 윔드의 의믞륌 읎핎하고, 윔딩 규칙곌 핚수 개발 가읎드띌읞에 대핮 학습한닀

01 핚수 Ʞ쎈

01 핚수의 개념곌 장점

핚수란 ì–Žë–€ 음을 수행하는 윔드의 덩얎늬

<aside> 💡 공식을 믞늬 만듀얎놓고 숫자만 대입하멎 아죌 쉜겠죠?

</aside>

  1. 필요할 때 마닀 혞출 가능
    1. 핚수는 반복적윌로 수행핎알 하는 업묎륌 한 번만 작성핎 놓고 필요할 때 마닀 혞출하여 사용
    2. 윔드륌 수정할 때 여러 번 수정할 필요없읎 한 번에 가능
  2. 녌늬적읞 닚위로 분할 가능
    1. 핚수는 윔드륌 녌늬적읞 닚위로 나눌 수 있닀
  3. 윔드의 캡슐화
    1. 핚수의 읞터페읎슀만 잘 정의하멎 닀륞 사람읎 자신의 윔드륌 쉜게 가젞닀 사용읎 가능
    2. 읞터페읎슀륌 잘 정의한닀 = 윔드에 입력되는 입력값곌 윔드의 수행 결곌읞 출력값을 명확히 한닀는 것 (화읎튞 박슀)

02 핚수의 ì„ ì–ž

def 핚수 읎늄 (맀개변수):
	명령묞1
	명령묞2
	return<반환값>

def: definition의 쀄임말로 핚수의 정의륌 시작한닀는 의믞

핚수 읎늄: 핚수 읎늄은 개발자가 마음대로 정할 수 있음 귞렇지만, 암묵적읞 규칙읎 있음

  1. 소묞자로 입력
  2. 띄얎쓰Ʞ는 _Ʞ혞 (underbar)
  3. 작업을 나타낎Ʞ 위핎 동사 명사 핚께 사용 (e.g. find_number)
  4. 왞부 공개 핚수는 쀄임말을 사용하지 않고 짧고 명료하게 정한닀

→ 변수 선얞하는 규칙곌 상당히 유사하닀

맀개변수(parameter): 맀개변수는 핚수에서 입력값윌로 사용하는 변수륌 의믞, 1개 읎상의 값을 적을 수 있음

명령묞: 명령묞은 반드시 듀여쓰Ʞ한 후 윔드륌 입력

수행핎알하는 윔드는 if묞읎나 for묞곌 같은 제얎묞읎나 고꞉ 프로귞래밍 Ʞ법을 쓰Ʞ도 핹

return: 반환읎란 print()륌 사용하지 않고도 결곌값을 볎여죌는 핚수읎닀 슉, 결곌값을 반환하는 값읎닀

<정늬>

  1. 핚수륌 만듀 때 def ì“°êž°
  2. 핚수 읎늄은 변수 읎늄곌 유사한 방식을 사용하여 짓Ʞ
  3. 핚수 읎늄곌 맀개변수 지정 ë’€ 윜론 사용
  4. 명령묞은 반드시 듀여쓰Ʞ 사용

03 핚수의 싀행 순서

핚수륌 만듀고 나서 핚수륌 썚알겠죠? 읎 곌정에 대핮 삎펎볎겠습니닀

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

rectangle_x = 10
rectangel_y = 20
print("사각형 x의 Ꞟ읎:", rectangle_x)
print("사각형 y의 Ꞟ읎:", rectangle_y)

print("사각형의 넓읎:", calculate_rectangle_area(rectangle_x, rectangle_y))

핚수의 정의만윌로는 핚수가 싀행되지 않는닀. 우늬가 print()핚수륌 직접 윔드에 작성하여 불러였는 것처럌 만듀얎진 핚수륌 불러와 싀행핎알만 사용할 수 있닀

>>> 사각형 x의 Ꞟ읎: 10
>>> 사각형 y의 Ꞟ읎: 20
>>> 사각형의 넓읎: 200

04 프로귞래밍의 핚수와 수학의 핚수

  • 프로귞래밍 핚수와 수학의 핚수는 상당히 유사!
    • 예시 ) f(x) = x+1<aside> 💡 알아두멎 쓞몚있는 파띌믞터(parameter) vs 읞수(argument) 파띌믞터는 핚수 읞터페읎슀 정의에 있얎 ì–Žë–€ 변수륌 사용하는지 정의하는 것 읞수는 싀제 맀개변수에 대입되는 값 몚두 핚수의 입력값윌로 불늬지만 정확한 의믞륌 파악하고 사용합시닀!
    • </aside>

05 핚수의 형태

def a_rectangle_area():
	print(5*7)
def b_rectangle_area():
	print(x,y)
def c_rectangle_area(x,y):
	return(5*7)
def d_rectangle_area(x,y):
	return(x,y)

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

02 핚수 심화

01 핚수의 혞출 방식

핚수에서 변수 혞출 방식

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

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

02 변수의 사용 범위

변수의 사용 범위는 말 귞대로 변수가 윔드에서 사용되는 범위

  • 지역 변수(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)
def f():
	s = " I love London!"
	print(s)
	

s = " I love Paris!"
f()
print(s)
def f():
	global s
	s = " I love London!"
	print(s)
	

s = " I love Paris!"
f()
print(s)
def calculate(x, y):
	total = x + y
	print("In Function")
	print("a:",str(a), 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), str(b), "a+b:", str(a+b))

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

03 재귀 핚수

재귀핚수란 자Ʞ 자신을 닀시 혞출하는 핚수

자신을 읎용하여 닀륞 핚수륌 정의할 때 사용

e.g.) 수학의 점화식

def factorial(n):
	if n == 1:
		return 1
	else:
		return n * factorial (n-1)

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

03 핚수의 읞수

01 킀워드 읞수

킀워드 읞수란 핚수에 입력되는 맀개변수의 변수명을 사용하여 핚수의 읞수륌 지정하는 방법

def print_somthing(my_name, your_name):
	print("Hello {0}, My name is {1}".format(your_name, my_name))

print_something("Sungchul", "TEAMLAB")
print_something(your_name = "TEAMLAB", my_name = "Sungchul")

02 디폮튾 읞수

디폮튾 읞수란 맀개변수에 Ʞ볞값을 지정하여 사용하고, 아묎런 값도 읞수로 넘얎가지 않을 때 지정된 Ʞ볞값을 사용하는 방식

def print_somthing_2(my_name, your_name = "TEAMLAB"):
	print("Hello {0}, My name is {1}".format(your_name, my_name))

print_something_2("Sungchul", "TEAMLAB")
print_something_2("Sungchul")

03 가변 읞수

가변 읞수란 윔드륌 작성할 때 가끔 핚수의 맀개변수 개수륌 정하지 ì•Šì•„ì•Œ 하는 겜우가 있닀 읎때 사용하는 것읎 가변 읞수읎닀.

def asterisk_test(a,b, *args)
	return a+b+sum(args)

print(asterisk_test(1,2,3,4,5))
def asterisk_test(a,b, *args)
	print(args)

print(asterisk_test(1,2,3,4,5))
def asterisk_test_2(*args)
	x, y, *z = args
	return x,y,z

print(asterisk_test_2(3,4,5))
def asterisk_test_2(*args)
	x, y, *z = args
	return x,y,z

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

04 킀워드 가변 읞수

가변 읞수는 변수의 순서대로 튜플 형태로 저장된닀 사용할 때는 맀우 간닚하지만 변수의 읎늄을 지정할 수 없닀는 닚점

→ 읎륌 볎안하Ʞ 위한 방법읎 킀워드 가변 읞수

킀워드 가변 읞수란 *륌 2개 사용하여 핚수의 맀개변수륌 표시한닀. 귞늬고 입력된 값을 튜플 자료형읎 아닌 딕셔너늬 자료형윌로 사용할 수 있닀

<aside> 💡 딕셔너늬란 변수명곌 값을 쌍윌로 저장하는 방식읎띌 생각하자 (아직 배우지 않아 간닚하게 읎정도멎 충분하닀!)

</aside>

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))

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

04 좋은 윔드륌 작성하는 방법

01 좋은 윔드의 의믞

  • 1죌찚부터 늘 강조했던 것 → 윔드는 나 혌자 짜는 게 아니닀!
    • 혌자서 작성할 수도 있겠지만 우늰 사회에 ì‚Žê³  있Ʞ 때묞에 회사에서나 개읞읎걎 윔드륌 공유하게 된닀 반드시
    • 귞래서 좋은 규칙읎 필요하닀
      • 좋은 규칙: 변수 읎늄 규칙, 핚수 읎늄 규칙 …

02 윔딩 규칙

  • 듀여쓰Ʞ는 4 슀페읎슀
  • 한 쀄은 최대 79자까지
  • 불필요한 공백 제거
  • 죌석은 항상 갱신하고 불필요한 죌석 삭제

⇒ PEP8

읎러한 규칙듀을 정의한 묞서읎닀. 반드시 지쌜알하는 걎 아니지만 안 지쌜서 나쁠 걎 없닀…

읎러한 규칙을 제대로 지쌰는지 확읞하는 몚듈: flake8

→ 몚듈까지 졎재하는 ê±° 볎멎 규칙의 쀑요성읎 느껎질 것읎닀

03 핚수 개발 가읎드띌읞

핚수 개발 가읎드띌읞은 파읎썬 한정읎 아닌 프로귞래밍 전반에 적용시킬 수 있는 것

핚수 읎늄

  • 핚수 낎용은 가능하멎 짧게 작성(쀄 수륌 쀄음 것)
  • 핚수 읎늄에 핚수의 역할곌 의도륌 명확히 드러낌 것

핚수 역할

  • 하나의 핚수에는 유사한 역할을 하는 윔드만 포핚
    • 핚수는 한 가지 역할을 명확하게 í•Žì•Œ 한닀

핚수륌 만듀얎알 하는 겜우

  • 공통윌로 사용되는 윔드륌 핚수로 변환
  • 복잡한 로직읎 사용되었을 때 식별 가능한 읎늄의 핚수로 변환
 a = 5
if (a>3):
	print("Hello World")
	print("Hello TEAMLAB")
if (a>4):
	print("Hello World")
	print("Hello TEAMLAB")
if (a>5):
	print("Hello World")
	print("Hello TEAMLAB")
def print_hello():
	print("Hello World")
	print("Hello TEAMLAB")

a= 5
if (a>3):
	print_hello()
if (a>4):
	print_hello()
if (a>5):
	print_hello()

chapter05 핚수

학습 목표

  • 핚수륌 선얞하는 방법, 핚수의 싀행 순서, 핚수의 4가지 형태에 대핮 알아볞닀
  • 핚수륌 혞출하는 방식곌 변수의 사용 범위에 대핮 학습하고, 재귀 핚수에 대핮 읎핎한닀
  • 핚수의 읞수읞 킀워드 읞수, 디폮튾 읞수, 가변 읞수, 킀워드 가변 읞수에 대핮 알아볞닀
  • 좋은 윔드의 의믞륌 읎핎하고, 윔딩 규칙곌 핚수 개발 가읎드띌읞에 대핮 학습한닀

01 핚수 Ʞ쎈

01 핚수의 개념곌 장점

핚수란 ì–Žë–€ 음을 수행하는 윔드의 덩얎늬

<aside> 💡 공식을 믞늬 만듀얎놓고 숫자만 대입하멎 아죌 쉜겠죠?

</aside>

  1. 필요할 때 마닀 혞출 가능
    1. 핚수는 반복적윌로 수행핎알 하는 업묎륌 한 번만 작성핎 놓고 필요할 때 마닀 혞출하여 사용
    2. 윔드륌 수정할 때 여러 번 수정할 필요없읎 한 번에 가능
  2. 녌늬적읞 닚위로 분할 가능
    1. 핚수는 윔드륌 녌늬적읞 닚위로 나눌 수 있닀
  3. 윔드의 캡슐화
    1. 핚수의 읞터페읎슀만 잘 정의하멎 닀륞 사람읎 자신의 윔드륌 쉜게 가젞닀 사용읎 가능
    2. 읞터페읎슀륌 잘 정의한닀 = 윔드에 입력되는 입력값곌 윔드의 수행 결곌읞 출력값을 명확히 한닀는 것 (화읎튞 박슀)

02 핚수의 ì„ ì–ž

def 핚수 읎늄 (맀개변수):
	명령묞1
	명령묞2
	return<반환값>

def: definition의 쀄임말로 핚수의 정의륌 시작한닀는 의믞

핚수 읎늄: 핚수 읎늄은 개발자가 마음대로 정할 수 있음 귞렇지만, 암묵적읞 규칙읎 있음

  1. 소묞자로 입력
  2. 띄얎쓰Ʞ는 _Ʞ혞 (underbar)
  3. 작업을 나타낎Ʞ 위핎 동사 명사 핚께 사용 (e.g. find_number)
  4. 왞부 공개 핚수는 쀄임말을 사용하지 않고 짧고 명료하게 정한닀

→ 변수 선얞하는 규칙곌 상당히 유사하닀

맀개변수(parameter): 맀개변수는 핚수에서 입력값윌로 사용하는 변수륌 의믞, 1개 읎상의 값을 적을 수 있음

명령묞: 명령묞은 반드시 듀여쓰Ʞ한 후 윔드륌 입력

수행핎알하는 윔드는 if묞읎나 for묞곌 같은 제얎묞읎나 고꞉ 프로귞래밍 Ʞ법을 쓰Ʞ도 핹

return: 반환읎란 print()륌 사용하지 않고도 결곌값을 볎여죌는 핚수읎닀 슉, 결곌값을 반환하는 값읎닀

<정늬>

  1. 핚수륌 만듀 때 def ì“°êž°
  2. 핚수 읎늄은 변수 읎늄곌 유사한 방식을 사용하여 짓Ʞ
  3. 핚수 읎늄곌 맀개변수 지정 ë’€ 윜론 사용
  4. 명령묞은 반드시 듀여쓰Ʞ 사용

03 핚수의 싀행 순서

핚수륌 만듀고 나서 핚수륌 썚알겠죠? 읎 곌정에 대핮 삎펎볎겠습니닀

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

rectangle_x = 10
rectangel_y = 20
print("사각형 x의 Ꞟ읎:", rectangle_x)
print("사각형 y의 Ꞟ읎:", rectangle_y)

print("사각형의 넓읎:", calculate_rectangle_area(rectangle_x, rectangle_y))

핚수의 정의만윌로는 핚수가 싀행되지 않는닀. 우늬가 print()핚수륌 직접 윔드에 작성하여 불러였는 것처럌 만듀얎진 핚수륌 불러와 싀행핎알만 사용할 수 있닀

>>> 사각형 x의 Ꞟ읎: 10
>>> 사각형 y의 Ꞟ읎: 20
>>> 사각형의 넓읎: 200

04 프로귞래밍의 핚수와 수학의 핚수

  • 프로귞래밍 핚수와 수학의 핚수는 상당히 유사!
    • 예시 ) f(x) = x+1<aside> 💡 알아두멎 쓞몚있는 파띌믞터(parameter) vs 읞수(argument) 파띌믞터는 핚수 읞터페읎슀 정의에 있얎 ì–Žë–€ 변수륌 사용하는지 정의하는 것 읞수는 싀제 맀개변수에 대입되는 값 몚두 핚수의 입력값윌로 불늬지만 정확한 의믞륌 파악하고 사용합시닀!
    • </aside>

05 핚수의 형태

def a_rectangle_area():
	print(5*7)
def b_rectangle_area():
	print(x,y)
def c_rectangle_area(x,y):
	return(5*7)
def d_rectangle_area(x,y):
	return(x,y)

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

02 핚수 심화

01 핚수의 혞출 방식

핚수에서 변수 혞출 방식

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

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

02 변수의 사용 범위

변수의 사용 범위는 말 귞대로 변수가 윔드에서 사용되는 범위

  • 지역 변수(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)
def f():
	s = " I love London!"
	print(s)
	

s = " I love Paris!"
f()
print(s)
def f():
	global s
	s = " I love London!"
	print(s)
	

s = " I love Paris!"
f()
print(s)
def calculate(x, y):
	total = x + y
	print("In Function")
	print("a:",str(a), 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), str(b), "a+b:", str(a+b))

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

03 재귀 핚수

재귀핚수란 자Ʞ 자신을 닀시 혞출하는 핚수

자신을 읎용하여 닀륞 핚수륌 정의할 때 사용

e.g.) 수학의 점화식

def factorial(n):
	if n == 1:
		return 1
	else:
		return n * factorial (n-1)

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

03 핚수의 읞수

01 킀워드 읞수

킀워드 읞수란 핚수에 입력되는 맀개변수의 변수명을 사용하여 핚수의 읞수륌 지정하는 방법

def print_somthing(my_name, your_name):
	print("Hello {0}, My name is {1}".format(your_name, my_name))

print_something("Sungchul", "TEAMLAB")
print_something(your_name = "TEAMLAB", my_name = "Sungchul")

02 디폮튾 읞수

디폮튾 읞수란 맀개변수에 Ʞ볞값을 지정하여 사용하고, 아묎런 값도 읞수로 넘얎가지 않을 때 지정된 Ʞ볞값을 사용하는 방식

def print_somthing_2(my_name, your_name = "TEAMLAB"):
	print("Hello {0}, My name is {1}".format(your_name, my_name))

print_something_2("Sungchul", "TEAMLAB")
print_something_2("Sungchul")

03 가변 읞수

가변 읞수란 윔드륌 작성할 때 가끔 핚수의 맀개변수 개수륌 정하지 ì•Šì•„ì•Œ 하는 겜우가 있닀 읎때 사용하는 것읎 가변 읞수읎닀.

def asterisk_test(a,b, *args)
	return a+b+sum(args)

print(asterisk_test(1,2,3,4,5))
def asterisk_test(a,b, *args)
	print(args)

print(asterisk_test(1,2,3,4,5))
def asterisk_test_2(*args)
	x, y, *z = args
	return x,y,z

print(asterisk_test_2(3,4,5))
def asterisk_test_2(*args)
	x, y, *z = args
	return x,y,z

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

04 킀워드 가변 읞수

가변 읞수는 변수의 순서대로 튜플 형태로 저장된닀 사용할 때는 맀우 간닚하지만 변수의 읎늄을 지정할 수 없닀는 닚점

→ 읎륌 볎안하Ʞ 위한 방법읎 킀워드 가변 읞수

킀워드 가변 읞수란 *륌 2개 사용하여 핚수의 맀개변수륌 표시한닀. 귞늬고 입력된 값을 튜플 자료형읎 아닌 딕셔너늬 자료형윌로 사용할 수 있닀

<aside> 💡 딕셔너늬란 변수명곌 값을 쌍윌로 저장하는 방식읎띌 생각하자 (아직 배우지 않아 간닚하게 읎정도멎 충분하닀!)

</aside>

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))

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

04 좋은 윔드륌 작성하는 방법

01 좋은 윔드의 의믞

  • 1죌찚부터 늘 강조했던 것 → 윔드는 나 혌자 짜는 게 아니닀!
    • 혌자서 작성할 수도 있겠지만 우늰 사회에 ì‚Žê³  있Ʞ 때묞에 회사에서나 개읞읎걎 윔드륌 공유하게 된닀 반드시
    • 귞래서 좋은 규칙읎 필요하닀
      • 좋은 규칙: 변수 읎늄 규칙, 핚수 읎늄 규칙 …

02 윔딩 규칙

  • 듀여쓰Ʞ는 4 슀페읎슀
  • 한 쀄은 최대 79자까지
  • 불필요한 공백 제거
  • 죌석은 항상 갱신하고 불필요한 죌석 삭제

⇒ PEP8

읎러한 규칙듀을 정의한 묞서읎닀. 반드시 지쌜알하는 걎 아니지만 안 지쌜서 나쁠 걎 없닀…

읎러한 규칙을 제대로 지쌰는지 확읞하는 몚듈: flake8

→ 몚듈까지 졎재하는 ê±° 볎멎 규칙의 쀑요성읎 느껎질 것읎닀

03 핚수 개발 가읎드띌읞

핚수 개발 가읎드띌읞은 파읎썬 한정읎 아닌 프로귞래밍 전반에 적용시킬 수 있는 것

핚수 읎늄

  • 핚수 낎용은 가능하멎 짧게 작성(쀄 수륌 쀄음 것)
  • 핚수 읎늄에 핚수의 역할곌 의도륌 명확히 드러낌 것

핚수 역할

  • 하나의 핚수에는 유사한 역할을 하는 윔드만 포핚
    • 핚수는 한 가지 역할을 명확하게 í•Žì•Œ 한닀

핚수륌 만듀얎알 하는 겜우

  • 공통윌로 사용되는 윔드륌 핚수로 변환
  • 복잡한 로직읎 사용되었을 때 식별 가능한 읎늄의 핚수로 변환
 a = 5
if (a>3):
	print("Hello World")
	print("Hello TEAMLAB")
if (a>4):
	print("Hello World")
	print("Hello TEAMLAB")
if (a>5):
	print("Hello World")
	print("Hello TEAMLAB")
def print_hello():
	print("Hello World")
	print("Hello TEAMLAB")

a= 5
if (a>3):
	print_hello()
if (a>4):
	print_hello()
if (a>5):
	print_hello()

chapter05 핚수

학습 목표

  • 핚수륌 선얞하는 방법, 핚수의 싀행 순서, 핚수의 4가지 형태에 대핮 알아볞닀
  • 핚수륌 혞출하는 방식곌 변수의 사용 범위에 대핮 학습하고, 재귀 핚수에 대핮 읎핎한닀
  • 핚수의 읞수읞 킀워드 읞수, 디폮튾 읞수, 가변 읞수, 킀워드 가변 읞수에 대핮 알아볞닀
  • 좋은 윔드의 의믞륌 읎핎하고, 윔딩 규칙곌 핚수 개발 가읎드띌읞에 대핮 학습한닀

01 핚수 Ʞ쎈

01 핚수의 개념곌 장점

핚수란 ì–Žë–€ 음을 수행하는 윔드의 덩얎늬

<aside> 💡 공식을 믞늬 만듀얎놓고 숫자만 대입하멎 아죌 쉜겠죠?

</aside>

  1. 필요할 때 마닀 혞출 가능
    1. 핚수는 반복적윌로 수행핎알 하는 업묎륌 한 번만 작성핎 놓고 필요할 때 마닀 혞출하여 사용
    2. 윔드륌 수정할 때 여러 번 수정할 필요없읎 한 번에 가능
  2. 녌늬적읞 닚위로 분할 가능
    1. 핚수는 윔드륌 녌늬적읞 닚위로 나눌 수 있닀
  3. 윔드의 캡슐화
    1. 핚수의 읞터페읎슀만 잘 정의하멎 닀륞 사람읎 자신의 윔드륌 쉜게 가젞닀 사용읎 가능
    2. 읞터페읎슀륌 잘 정의한닀 = 윔드에 입력되는 입력값곌 윔드의 수행 결곌읞 출력값을 명확히 한닀는 것 (화읎튞 박슀)

02 핚수의 ì„ ì–ž

def 핚수 읎늄 (맀개변수):
	명령묞1
	명령묞2
	return<반환값>

def: definition의 쀄임말로 핚수의 정의륌 시작한닀는 의믞

핚수 읎늄: 핚수 읎늄은 개발자가 마음대로 정할 수 있음 귞렇지만, 암묵적읞 규칙읎 있음

  1. 소묞자로 입력
  2. 띄얎쓰Ʞ는 _Ʞ혞 (underbar)
  3. 작업을 나타낎Ʞ 위핎 동사 명사 핚께 사용 (e.g. find_number)
  4. 왞부 공개 핚수는 쀄임말을 사용하지 않고 짧고 명료하게 정한닀

→ 변수 선얞하는 규칙곌 상당히 유사하닀

맀개변수(parameter): 맀개변수는 핚수에서 입력값윌로 사용하는 변수륌 의믞, 1개 읎상의 값을 적을 수 있음

명령묞: 명령묞은 반드시 듀여쓰Ʞ한 후 윔드륌 입력

수행핎알하는 윔드는 if묞읎나 for묞곌 같은 제얎묞읎나 고꞉ 프로귞래밍 Ʞ법을 쓰Ʞ도 핹

return: 반환읎란 print()륌 사용하지 않고도 결곌값을 볎여죌는 핚수읎닀 슉, 결곌값을 반환하는 값읎닀

<정늬>

  1. 핚수륌 만듀 때 def ì“°êž°
  2. 핚수 읎늄은 변수 읎늄곌 유사한 방식을 사용하여 짓Ʞ
  3. 핚수 읎늄곌 맀개변수 지정 ë’€ 윜론 사용
  4. 명령묞은 반드시 듀여쓰Ʞ 사용

03 핚수의 싀행 순서

핚수륌 만듀고 나서 핚수륌 썚알겠죠? 읎 곌정에 대핮 삎펎볎겠습니닀

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

rectangle_x = 10
rectangel_y = 20
print("사각형 x의 Ꞟ읎:", rectangle_x)
print("사각형 y의 Ꞟ읎:", rectangle_y)

print("사각형의 넓읎:", calculate_rectangle_area(rectangle_x, rectangle_y))

핚수의 정의만윌로는 핚수가 싀행되지 않는닀. 우늬가 print()핚수륌 직접 윔드에 작성하여 불러였는 것처럌 만듀얎진 핚수륌 불러와 싀행핎알만 사용할 수 있닀

>>> 사각형 x의 Ꞟ읎: 10
>>> 사각형 y의 Ꞟ읎: 20
>>> 사각형의 넓읎: 200

04 프로귞래밍의 핚수와 수학의 핚수

  • 프로귞래밍 핚수와 수학의 핚수는 상당히 유사!
    • 예시 ) f(x) = x+1<aside> 💡 알아두멎 쓞몚있는 파띌믞터(parameter) vs 읞수(argument) 파띌믞터는 핚수 읞터페읎슀 정의에 있얎 ì–Žë–€ 변수륌 사용하는지 정의하는 것 읞수는 싀제 맀개변수에 대입되는 값 몚두 핚수의 입력값윌로 불늬지만 정확한 의믞륌 파악하고 사용합시닀!
    • </aside>

05 핚수의 형태

def a_rectangle_area():
	print(5*7)
def b_rectangle_area():
	print(x,y)
def c_rectangle_area(x,y):
	return(5*7)
def d_rectangle_area(x,y):
	return(x,y)

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

02 핚수 심화

01 핚수의 혞출 방식

핚수에서 변수 혞출 방식

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

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

02 변수의 사용 범위

변수의 사용 범위는 말 귞대로 변수가 윔드에서 사용되는 범위

  • 지역 변수(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)
def f():
	s = " I love London!"
	print(s)
	

s = " I love Paris!"
f()
print(s)
def f():
	global s
	s = " I love London!"
	print(s)
	

s = " I love Paris!"
f()
print(s)
def calculate(x, y):
	total = x + y
	print("In Function")
	print("a:",str(a), 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), str(b), "a+b:", str(a+b))

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

03 재귀 핚수

재귀핚수란 자Ʞ 자신을 닀시 혞출하는 핚수

자신을 읎용하여 닀륞 핚수륌 정의할 때 사용

e.g.) 수학의 점화식

def factorial(n):
	if n == 1:
		return 1
	else:
		return n * factorial (n-1)

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

03 핚수의 읞수

01 킀워드 읞수

킀워드 읞수란 핚수에 입력되는 맀개변수의 변수명을 사용하여 핚수의 읞수륌 지정하는 방법

def print_somthing(my_name, your_name):
	print("Hello {0}, My name is {1}".format(your_name, my_name))

print_something("Sungchul", "TEAMLAB")
print_something(your_name = "TEAMLAB", my_name = "Sungchul")

02 디폮튾 읞수

디폮튾 읞수란 맀개변수에 Ʞ볞값을 지정하여 사용하고, 아묎런 값도 읞수로 넘얎가지 않을 때 지정된 Ʞ볞값을 사용하는 방식

def print_somthing_2(my_name, your_name = "TEAMLAB"):
	print("Hello {0}, My name is {1}".format(your_name, my_name))

print_something_2("Sungchul", "TEAMLAB")
print_something_2("Sungchul")

03 가변 읞수

가변 읞수란 윔드륌 작성할 때 가끔 핚수의 맀개변수 개수륌 정하지 ì•Šì•„ì•Œ 하는 겜우가 있닀 읎때 사용하는 것읎 가변 읞수읎닀.

def asterisk_test(a,b, *args)
	return a+b+sum(args)

print(asterisk_test(1,2,3,4,5))
def asterisk_test(a,b, *args)
	print(args)

print(asterisk_test(1,2,3,4,5))
def asterisk_test_2(*args)
	x, y, *z = args
	return x,y,z

print(asterisk_test_2(3,4,5))
def asterisk_test_2(*args)
	x, y, *z = args
	return x,y,z

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

04 킀워드 가변 읞수

가변 읞수는 변수의 순서대로 튜플 형태로 저장된닀 사용할 때는 맀우 간닚하지만 변수의 읎늄을 지정할 수 없닀는 닚점

→ 읎륌 볎안하Ʞ 위한 방법읎 킀워드 가변 읞수

킀워드 가변 읞수란 *륌 2개 사용하여 핚수의 맀개변수륌 표시한닀. 귞늬고 입력된 값을 튜플 자료형읎 아닌 딕셔너늬 자료형윌로 사용할 수 있닀

<aside> 💡 딕셔너늬란 변수명곌 값을 쌍윌로 저장하는 방식읎띌 생각하자 (아직 배우지 않아 간닚하게 읎정도멎 충분하닀!)

</aside>

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))

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

04 좋은 윔드륌 작성하는 방법

01 좋은 윔드의 의믞

  • 1죌찚부터 늘 강조했던 것 → 윔드는 나 혌자 짜는 게 아니닀!
    • 혌자서 작성할 수도 있겠지만 우늰 사회에 ì‚Žê³  있Ʞ 때묞에 회사에서나 개읞읎걎 윔드륌 공유하게 된닀 반드시
    • 귞래서 좋은 규칙읎 필요하닀
      • 좋은 규칙: 변수 읎늄 규칙, 핚수 읎늄 규칙 …

02 윔딩 규칙

  • 듀여쓰Ʞ는 4 슀페읎슀
  • 한 쀄은 최대 79자까지
  • 불필요한 공백 제거
  • 죌석은 항상 갱신하고 불필요한 죌석 삭제

⇒ PEP8

읎러한 규칙듀을 정의한 묞서읎닀. 반드시 지쌜알하는 걎 아니지만 안 지쌜서 나쁠 걎 없닀…

읎러한 규칙을 제대로 지쌰는지 확읞하는 몚듈: flake8

→ 몚듈까지 졎재하는 ê±° 볎멎 규칙의 쀑요성읎 느껎질 것읎닀

03 핚수 개발 가읎드띌읞

핚수 개발 가읎드띌읞은 파읎썬 한정읎 아닌 프로귞래밍 전반에 적용시킬 수 있는 것

핚수 읎늄

  • 핚수 낎용은 가능하멎 짧게 작성(쀄 수륌 쀄음 것)
  • 핚수 읎늄에 핚수의 역할곌 의도륌 명확히 드러낌 것

핚수 역할

  • 하나의 핚수에는 유사한 역할을 하는 윔드만 포핚
    • 핚수는 한 가지 역할을 명확하게 í•Žì•Œ 한닀

핚수륌 만듀얎알 하는 겜우

  • 공통윌로 사용되는 윔드륌 핚수로 변환
  • 복잡한 로직읎 사용되었을 때 식별 가능한 읎늄의 핚수로 변환
 a = 5
if (a>3):
	print("Hello World")
	print("Hello TEAMLAB")
if (a>4):
	print("Hello World")
	print("Hello TEAMLAB")
if (a>5):
	print("Hello World")
	print("Hello TEAMLAB")
def print_hello():
	print("Hello World")
	print("Hello TEAMLAB")

a= 5
if (a>3):
	print_hello()
if (a>4):
	print_hello()
if (a>5):
	print_hello()

chapter05 핚수

학습 목표

  • 핚수륌 선얞하는 방법, 핚수의 싀행 순서, 핚수의 4가지 형태에 대핮 알아볞닀
  • 핚수륌 혞출하는 방식곌 변수의 사용 범위에 대핮 학습하고, 재귀 핚수에 대핮 읎핎한닀
  • 핚수의 읞수읞 킀워드 읞수, 디폮튾 읞수, 가변 읞수, 킀워드 가변 읞수에 대핮 알아볞닀
  • 좋은 윔드의 의믞륌 읎핎하고, 윔딩 규칙곌 핚수 개발 가읎드띌읞에 대핮 학습한닀

01 핚수 Ʞ쎈

01 핚수의 개념곌 장점

핚수란 ì–Žë–€ 음을 수행하는 윔드의 덩얎늬

<aside> 💡 공식을 믞늬 만듀얎놓고 숫자만 대입하멎 아죌 쉜겠죠?

</aside>

  1. 필요할 때 마닀 혞출 가능
    1. 핚수는 반복적윌로 수행핎알 하는 업묎륌 한 번만 작성핎 놓고 필요할 때 마닀 혞출하여 사용
    2. 윔드륌 수정할 때 여러 번 수정할 필요없읎 한 번에 가능
  2. 녌늬적읞 닚위로 분할 가능
    1. 핚수는 윔드륌 녌늬적읞 닚위로 나눌 수 있닀
  3. 윔드의 캡슐화
    1. 핚수의 읞터페읎슀만 잘 정의하멎 닀륞 사람읎 자신의 윔드륌 쉜게 가젞닀 사용읎 가능
    2. 읞터페읎슀륌 잘 정의한닀 = 윔드에 입력되는 입력값곌 윔드의 수행 결곌읞 출력값을 명확히 한닀는 것 (화읎튞 박슀)

02 핚수의 ì„ ì–ž

def 핚수 읎늄 (맀개변수):
	명령묞1
	명령묞2
	return<반환값>

def: definition의 쀄임말로 핚수의 정의륌 시작한닀는 의믞

핚수 읎늄: 핚수 읎늄은 개발자가 마음대로 정할 수 있음 귞렇지만, 암묵적읞 규칙읎 있음

  1. 소묞자로 입력
  2. 띄얎쓰Ʞ는 _Ʞ혞 (underbar)
  3. 작업을 나타낎Ʞ 위핎 동사 명사 핚께 사용 (e.g. find_number)
  4. 왞부 공개 핚수는 쀄임말을 사용하지 않고 짧고 명료하게 정한닀

→ 변수 선얞하는 규칙곌 상당히 유사하닀

맀개변수(parameter): 맀개변수는 핚수에서 입력값윌로 사용하는 변수륌 의믞, 1개 읎상의 값을 적을 수 있음

명령묞: 명령묞은 반드시 듀여쓰Ʞ한 후 윔드륌 입력

수행핎알하는 윔드는 if묞읎나 for묞곌 같은 제얎묞읎나 고꞉ 프로귞래밍 Ʞ법을 쓰Ʞ도 핹

return: 반환읎란 print()륌 사용하지 않고도 결곌값을 볎여죌는 핚수읎닀 슉, 결곌값을 반환하는 값읎닀

<정늬>

  1. 핚수륌 만듀 때 def ì“°êž°
  2. 핚수 읎늄은 변수 읎늄곌 유사한 방식을 사용하여 짓Ʞ
  3. 핚수 읎늄곌 맀개변수 지정 ë’€ 윜론 사용
  4. 명령묞은 반드시 듀여쓰Ʞ 사용

03 핚수의 싀행 순서

핚수륌 만듀고 나서 핚수륌 썚알겠죠? 읎 곌정에 대핮 삎펎볎겠습니닀

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

rectangle_x = 10
rectangel_y = 20
print("사각형 x의 Ꞟ읎:", rectangle_x)
print("사각형 y의 Ꞟ읎:", rectangle_y)

print("사각형의 넓읎:", calculate_rectangle_area(rectangle_x, rectangle_y))

핚수의 정의만윌로는 핚수가 싀행되지 않는닀. 우늬가 print()핚수륌 직접 윔드에 작성하여 불러였는 것처럌 만듀얎진 핚수륌 불러와 싀행핎알만 사용할 수 있닀

>>> 사각형 x의 Ꞟ읎: 10
>>> 사각형 y의 Ꞟ읎: 20
>>> 사각형의 넓읎: 200

04 프로귞래밍의 핚수와 수학의 핚수

  • 프로귞래밍 핚수와 수학의 핚수는 상당히 유사!
    • 예시 ) f(x) = x+1<aside> 💡 알아두멎 쓞몚있는 파띌믞터(parameter) vs 읞수(argument) 파띌믞터는 핚수 읞터페읎슀 정의에 있얎 ì–Žë–€ 변수륌 사용하는지 정의하는 것 읞수는 싀제 맀개변수에 대입되는 값 몚두 핚수의 입력값윌로 불늬지만 정확한 의믞륌 파악하고 사용합시닀!
    • </aside>

05 핚수의 형태

def a_rectangle_area():
	print(5*7)
def b_rectangle_area():
	print(x,y)
def c_rectangle_area(x,y):
	return(5*7)
def d_rectangle_area(x,y):
	return(x,y)

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

02 핚수 심화

01 핚수의 혞출 방식

핚수에서 변수 혞출 방식

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

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

02 변수의 사용 범위

변수의 사용 범위는 말 귞대로 변수가 윔드에서 사용되는 범위

  • 지역 변수(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)
def f():
	s = " I love London!"
	print(s)
	

s = " I love Paris!"
f()
print(s)
def f():
	global s
	s = " I love London!"
	print(s)
	

s = " I love Paris!"
f()
print(s)
def calculate(x, y):
	total = x + y
	print("In Function")
	print("a:",str(a), 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), str(b), "a+b:", str(a+b))

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

03 재귀 핚수

재귀핚수란 자Ʞ 자신을 닀시 혞출하는 핚수

자신을 읎용하여 닀륞 핚수륌 정의할 때 사용

e.g.) 수학의 점화식

def factorial(n):
	if n == 1:
		return 1
	else:
		return n * factorial (n-1)

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

03 핚수의 읞수

01 킀워드 읞수

킀워드 읞수란 핚수에 입력되는 맀개변수의 변수명을 사용하여 핚수의 읞수륌 지정하는 방법

def print_somthing(my_name, your_name):
	print("Hello {0}, My name is {1}".format(your_name, my_name))

print_something("Sungchul", "TEAMLAB")
print_something(your_name = "TEAMLAB", my_name = "Sungchul")

02 디폮튾 읞수

디폮튾 읞수란 맀개변수에 Ʞ볞값을 지정하여 사용하고, 아묎런 값도 읞수로 넘얎가지 않을 때 지정된 Ʞ볞값을 사용하는 방식

def print_somthing_2(my_name, your_name = "TEAMLAB"):
	print("Hello {0}, My name is {1}".format(your_name, my_name))

print_something_2("Sungchul", "TEAMLAB")
print_something_2("Sungchul")

03 가변 읞수

가변 읞수란 윔드륌 작성할 때 가끔 핚수의 맀개변수 개수륌 정하지 ì•Šì•„ì•Œ 하는 겜우가 있닀 읎때 사용하는 것읎 가변 읞수읎닀.

def asterisk_test(a,b, *args)
	return a+b+sum(args)

print(asterisk_test(1,2,3,4,5))
def asterisk_test(a,b, *args)
	print(args)

print(asterisk_test(1,2,3,4,5))
def asterisk_test_2(*args)
	x, y, *z = args
	return x,y,z

print(asterisk_test_2(3,4,5))
def asterisk_test_2(*args)
	x, y, *z = args
	return x,y,z

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

04 킀워드 가변 읞수

가변 읞수는 변수의 순서대로 튜플 형태로 저장된닀 사용할 때는 맀우 간닚하지만 변수의 읎늄을 지정할 수 없닀는 닚점

→ 읎륌 볎안하Ʞ 위한 방법읎 킀워드 가변 읞수

킀워드 가변 읞수란 *륌 2개 사용하여 핚수의 맀개변수륌 표시한닀. 귞늬고 입력된 값을 튜플 자료형읎 아닌 딕셔너늬 자료형윌로 사용할 수 있닀

<aside> 💡 딕셔너늬란 변수명곌 값을 쌍윌로 저장하는 방식읎띌 생각하자 (아직 배우지 않아 간닚하게 읎정도멎 충분하닀!)

</aside>

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))

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

04 좋은 윔드륌 작성하는 방법

01 좋은 윔드의 의믞

  • 1죌찚부터 늘 강조했던 것 → 윔드는 나 혌자 짜는 게 아니닀!
    • 혌자서 작성할 수도 있겠지만 우늰 사회에 ì‚Žê³  있Ʞ 때묞에 회사에서나 개읞읎걎 윔드륌 공유하게 된닀 반드시
    • 귞래서 좋은 규칙읎 필요하닀
      • 좋은 규칙: 변수 읎늄 규칙, 핚수 읎늄 규칙 …

02 윔딩 규칙

  • 듀여쓰Ʞ는 4 슀페읎슀
  • 한 쀄은 최대 79자까지
  • 불필요한 공백 제거
  • 죌석은 항상 갱신하고 불필요한 죌석 삭제

⇒ PEP8

읎러한 규칙듀을 정의한 묞서읎닀. 반드시 지쌜알하는 걎 아니지만 안 지쌜서 나쁠 걎 없닀…

읎러한 규칙을 제대로 지쌰는지 확읞하는 몚듈: flake8

→ 몚듈까지 졎재하는 ê±° 볎멎 규칙의 쀑요성읎 느껎질 것읎닀

03 핚수 개발 가읎드띌읞

핚수 개발 가읎드띌읞은 파읎썬 한정읎 아닌 프로귞래밍 전반에 적용시킬 수 있는 것

핚수 읎늄

  • 핚수 낎용은 가능하멎 짧게 작성(쀄 수륌 쀄음 것)
  • 핚수 읎늄에 핚수의 역할곌 의도륌 명확히 드러낌 것

핚수 역할

  • 하나의 핚수에는 유사한 역할을 하는 윔드만 포핚
    • 핚수는 한 가지 역할을 명확하게 í•Žì•Œ 한닀

핚수륌 만듀얎알 하는 겜우

  • 공통윌로 사용되는 윔드륌 핚수로 변환
  • 복잡한 로직읎 사용되었을 때 식별 가능한 읎늄의 핚수로 변환
 a = 5
if (a>3):
	print("Hello World")
	print("Hello TEAMLAB")
if (a>4):
	print("Hello World")
	print("Hello TEAMLAB")
if (a>5):
	print("Hello World")
	print("Hello TEAMLAB")
def print_hello():
	print("Hello World")
	print("Hello TEAMLAB")

a= 5
if (a>3):
	print_hello()
if (a>4):
	print_hello()
if (a>5):
	print_hello()