chapter05 함수
학습 목표
- 함수를 선언하는 방법, 함수의 실행 순서, 함수의 4가지 형태에 대해 알아본다
- 함수를 호출하는 방식과 변수의 사용 범위에 대해 학습하고, 재귀 함수에 대해 이해한다
- 함수의 인수인 키워드 인수, 디폴트 인수, 가변 인수, 키워드 가변 인수에 대해 알아본다
- 좋은 코드의 의미를 이해하고, 코딩 규칙과 함수 개발 가이드라인에 대해 학습한다
01 함수 기초
01 함수의 개념과 장점
함수란 어떤 일을 수행하는 코드의 덩어리
<aside> 💡 공식을 미리 만들어놓고 숫자만 대입하면 아주 쉽겠죠?
</aside>
- 필요할 때 마다 호출 가능
- 함수는 반복적으로 수행해야 하는 업무를 한 번만 작성해 놓고 필요할 때 마다 호출하여 사용
- 코드를 수정할 때 여러 번 수정할 필요없이 한 번에 가능
- 논리적인 단위로 분할 가능
- 함수는 코드를 논리적인 단위로 나눌 수 있다
- 코드의 캡슐화
- 함수의 인터페이스만 잘 정의하면 다른 사람이 자신의 코드를 쉽게 가져다 사용이 가능
- 인터페이스를 잘 정의한다 = 코드에 입력되는 입력값과 코드의 수행 결과인 출력값을 명확히 한다는 것 (화이트 박스)
02 함수의 선언
def 함수 이름 (매개변수):
명령문1
명령문2
return<반환값>
def: definition의 줄임말로 함수의 정의를 시작한다는 의미
함수 이름: 함수 이름은 개발자가 마음대로 정할 수 있음 그렇지만, 암묵적인 규칙이 있음
- 소문자로 입력
- 띄어쓰기는 _기호 (underbar)
- 작업을 나타내기 위해 동사 명사 함께 사용 (e.g. find_number)
- 외부 공개 함수는 줄임말을 사용하지 않고 짧고 명료하게 정한다
→ 변수 선언하는 규칙과 상당히 유사하다
매개변수(parameter): 매개변수는 함수에서 입력값으로 사용하는 변수를 의미, 1개 이상의 값을 적을 수 있음
명령문: 명령문은 반드시 들여쓰기한 후 코드를 입력
수행해야하는 코드는 if문이나 for문과 같은 제어문이나 고급 프로그래밍 기법을 쓰기도 함
return: 반환이란 print()를 사용하지 않고도 결과값을 보여주는 함수이다 즉, 결과값을 반환하는 값이다
<정리>
- 함수를 만들 때 def 쓰기
- 함수 이름은 변수 이름과 유사한 방식을 사용하여 짓기
- 함수 이름과 매개변수 지정 뒤 콜론 사용
- 명령문은 반드시 들여쓰기 사용
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>
- 필요할 때 마다 호출 가능
- 함수는 반복적으로 수행해야 하는 업무를 한 번만 작성해 놓고 필요할 때 마다 호출하여 사용
- 코드를 수정할 때 여러 번 수정할 필요없이 한 번에 가능
- 논리적인 단위로 분할 가능
- 함수는 코드를 논리적인 단위로 나눌 수 있다
- 코드의 캡슐화
- 함수의 인터페이스만 잘 정의하면 다른 사람이 자신의 코드를 쉽게 가져다 사용이 가능
- 인터페이스를 잘 정의한다 = 코드에 입력되는 입력값과 코드의 수행 결과인 출력값을 명확히 한다는 것 (화이트 박스)
02 함수의 선언
def 함수 이름 (매개변수):
명령문1
명령문2
return<반환값>
def: definition의 줄임말로 함수의 정의를 시작한다는 의미
함수 이름: 함수 이름은 개발자가 마음대로 정할 수 있음 그렇지만, 암묵적인 규칙이 있음
- 소문자로 입력
- 띄어쓰기는 _기호 (underbar)
- 작업을 나타내기 위해 동사 명사 함께 사용 (e.g. find_number)
- 외부 공개 함수는 줄임말을 사용하지 않고 짧고 명료하게 정한다
→ 변수 선언하는 규칙과 상당히 유사하다
매개변수(parameter): 매개변수는 함수에서 입력값으로 사용하는 변수를 의미, 1개 이상의 값을 적을 수 있음
명령문: 명령문은 반드시 들여쓰기한 후 코드를 입력
수행해야하는 코드는 if문이나 for문과 같은 제어문이나 고급 프로그래밍 기법을 쓰기도 함
return: 반환이란 print()를 사용하지 않고도 결과값을 보여주는 함수이다 즉, 결과값을 반환하는 값이다
<정리>
- 함수를 만들 때 def 쓰기
- 함수 이름은 변수 이름과 유사한 방식을 사용하여 짓기
- 함수 이름과 매개변수 지정 뒤 콜론 사용
- 명령문은 반드시 들여쓰기 사용
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>
- 필요할 때 마다 호출 가능
- 함수는 반복적으로 수행해야 하는 업무를 한 번만 작성해 놓고 필요할 때 마다 호출하여 사용
- 코드를 수정할 때 여러 번 수정할 필요없이 한 번에 가능
- 논리적인 단위로 분할 가능
- 함수는 코드를 논리적인 단위로 나눌 수 있다
- 코드의 캡슐화
- 함수의 인터페이스만 잘 정의하면 다른 사람이 자신의 코드를 쉽게 가져다 사용이 가능
- 인터페이스를 잘 정의한다 = 코드에 입력되는 입력값과 코드의 수행 결과인 출력값을 명확히 한다는 것 (화이트 박스)
02 함수의 선언
def 함수 이름 (매개변수):
명령문1
명령문2
return<반환값>
def: definition의 줄임말로 함수의 정의를 시작한다는 의미
함수 이름: 함수 이름은 개발자가 마음대로 정할 수 있음 그렇지만, 암묵적인 규칙이 있음
- 소문자로 입력
- 띄어쓰기는 _기호 (underbar)
- 작업을 나타내기 위해 동사 명사 함께 사용 (e.g. find_number)
- 외부 공개 함수는 줄임말을 사용하지 않고 짧고 명료하게 정한다
→ 변수 선언하는 규칙과 상당히 유사하다
매개변수(parameter): 매개변수는 함수에서 입력값으로 사용하는 변수를 의미, 1개 이상의 값을 적을 수 있음
명령문: 명령문은 반드시 들여쓰기한 후 코드를 입력
수행해야하는 코드는 if문이나 for문과 같은 제어문이나 고급 프로그래밍 기법을 쓰기도 함
return: 반환이란 print()를 사용하지 않고도 결과값을 보여주는 함수이다 즉, 결과값을 반환하는 값이다
<정리>
- 함수를 만들 때 def 쓰기
- 함수 이름은 변수 이름과 유사한 방식을 사용하여 짓기
- 함수 이름과 매개변수 지정 뒤 콜론 사용
- 명령문은 반드시 들여쓰기 사용
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>
- 필요할 때 마다 호출 가능
- 함수는 반복적으로 수행해야 하는 업무를 한 번만 작성해 놓고 필요할 때 마다 호출하여 사용
- 코드를 수정할 때 여러 번 수정할 필요없이 한 번에 가능
- 논리적인 단위로 분할 가능
- 함수는 코드를 논리적인 단위로 나눌 수 있다
- 코드의 캡슐화
- 함수의 인터페이스만 잘 정의하면 다른 사람이 자신의 코드를 쉽게 가져다 사용이 가능
- 인터페이스를 잘 정의한다 = 코드에 입력되는 입력값과 코드의 수행 결과인 출력값을 명확히 한다는 것 (화이트 박스)
02 함수의 선언
def 함수 이름 (매개변수):
명령문1
명령문2
return<반환값>
def: definition의 줄임말로 함수의 정의를 시작한다는 의미
함수 이름: 함수 이름은 개발자가 마음대로 정할 수 있음 그렇지만, 암묵적인 규칙이 있음
- 소문자로 입력
- 띄어쓰기는 _기호 (underbar)
- 작업을 나타내기 위해 동사 명사 함께 사용 (e.g. find_number)
- 외부 공개 함수는 줄임말을 사용하지 않고 짧고 명료하게 정한다
→ 변수 선언하는 규칙과 상당히 유사하다
매개변수(parameter): 매개변수는 함수에서 입력값으로 사용하는 변수를 의미, 1개 이상의 값을 적을 수 있음
명령문: 명령문은 반드시 들여쓰기한 후 코드를 입력
수행해야하는 코드는 if문이나 for문과 같은 제어문이나 고급 프로그래밍 기법을 쓰기도 함
return: 반환이란 print()를 사용하지 않고도 결과값을 보여주는 함수이다 즉, 결과값을 반환하는 값이다
<정리>
- 함수를 만들 때 def 쓰기
- 함수 이름은 변수 이름과 유사한 방식을 사용하여 짓기
- 함수 이름과 매개변수 지정 뒤 콜론 사용
- 명령문은 반드시 들여쓰기 사용
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()
'스터디 > 파이썬 스터디 강의자료' 카테고리의 다른 글
[1팀/허서원] 5차시 파이썬 스터디 - 함수 (0) | 2023.04.06 |
---|---|
[4팀/이제은] 5차시 파이썬 스터디 - 함수 (0) | 2023.04.06 |
[1팀/한규림] 5차시 파이썬 스터디 - 함수 (0) | 2023.04.06 |
[2팀/김가림, 최다예] 5차시 파이썬 스터디 - 함수 (0) | 2023.04.06 |
[3팀/김경은] 5차시 파이썬 스터디 - 함수 (0) | 2023.04.05 |