스터디/파이썬 스터디 강의자료

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