반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- numpy
- 코딩
- 유학생
- 영국석사
- 코드잇 TIL
- Seaborn
- CSS
- SQL
- 경사하강법
- 코딩공부
- 오늘도코드잇
- 파이썬
- matplotlib
- 다항회귀
- HTML
- 나혼자코딩
- 결정트리
- 판다스
- 로지스틱회귀
- 행렬
- 데이터분석
- 머신러닝
- 런던
- 코드잇TIL
- 윈도우함수
- 선형회귀
- sql연습문제
- for반복문
- 코딩독학
- 코드잇
Archives
- Today
- Total
영국 척척석사 유학생 일기장👩🏻🎓
(파이썬) def 함수 정의하고 호출하기, 변수 범위 본문
728x90
반응형
함수를 사용하려면 먼저 함수가 어떤 역할을 하는지, 어떤 입력값이 필요할 수 있는지를 정의해야 합니다. 함수 안에 있는 코드는 우리가 그 함수를 호출하거나 사용할 때만 실행됩니다. 이번 글에서는 함수를 def로 정의하고 호출하는 방법에 대해 알아보겠습니다.
1. 함수 정의하기
- 먼저, 예시로 실린더의 부피를 계산하는 함수를 만들어보겠습니다.
def cylinder_volume(height, radius):
pi = 3.14159
return height * pi * radious ** 2
- cylinder_volume 함수를 정의한 후에 아래와 같이 그 함수를 호출할 수 있습니다.
cylinder_volume(10, 3)
1) 함수 header
- 위 구문을 자세히 살펴보겠습니다.
- 함수 헤더는 항상 키워드 def로 시작하고 이것이 함수 정의(function definition)임을 나타냅니다.
- 그 다음에는 함수 이름이 나옵니다. 여기서는 cylinder_volume입니다.
- 이름 바로 뒤에는 괄호가 나오고, 그 안에는 쉼표로 구분한 인수가 있을 수 있습니다. 여기서는 (height, radious)입니다.
- 인수 또는 매개변수는 함수를 호출할 때 넣는 값이며 그 인수들을 함수 본문에서 사용합니다.
- 함수가 인수를 받지 않으면 괄호 안을 비워둡니다.
- 헤더는 항상 : 로 끝납니다.
2) 함수 body
- 함수의 바디는 헤더 줄 뒤에서 들여쓰기를 한 코드입니다. 여기서는 pi를 정의하고 부피를 return 하는 두 줄입니다.
- 바디 안에서 인수 변수를 참조하고 새로운 변수를 정의할 수 있습니다.
- 그 변수들은 들여쓰기를 한 줄 안에서만 사용할 수 있습니다.
- 바디에는 함수의 출력값을 그 함수를 호출한 구문에게 반환하는 return 문이 포함되어 있습니다.
- return 문은 키워드 return 뒤에 계산을 통해 그 함수의 출력값을 받는 식을 써서 작성합니다.
- return 문이 없을 경우에는 함수가 그냥 None을 리턴합니다.
2. 함수에서 print와 return의 차이점
- print는 콘솔에 출력을 제공하는 반면, return은 값을 저장하며 나중에 작업하고 코딩할 수 있는 값을 제공합니다.
- 아래의 예시를 보겠습니다.
def add_ten(num):
print(num + 10)
def add_ten(num):
return(num + 10)
- 위의 두 함수를 print 해보겠습니다.
return_value_1 = show_plus_ten(5)
print('This function returned: {}'.format(return_value_1)
>>> 15
This function returned: None
return_value_2 = add_ten(5)
print('This function returned: {}'.format(return_value_2))
>>> This function returned: 15
3. 기본 인수(default)
- 함수에 기본 인수를 추가해서 함수 호출에서 지정하지 않은 매개변수의 기본값을 설정할 수 있습니다.
def cylinder_volume(height, radius=5):
pi = 3.14159
return height * pi * radius ** 2
- 이런 식으로 radius의 디폴트 값을 5로 설정합니다.
print(cylinder_volume(10, 5))
print(cylinder_volumne(10))
>>> 782.8975
782.8975
- 따라서 위의 두 값은 같습니다.
- 또한, 위 코드에서 위치를 이용하여 인수에 값을 전달하고 있습니다.
- 값은 위치를 이용하거나, 이름을 이용하여 전달할 수 있습니다.
- 따라서 아래의 함수 호출들은 모두 같은 식으로 평가됩니다.
cylinder_volume(10. 7)
cylinder_volume(height=10, radius=7)
- 또한, readable_timedelta 함수를 만들어서 10일이 몇 주 몇 일인지 알아보는 함수를 만들어 보겠습니다.
def readable_timedelta(days):
weeks = days // 7
remainder = days % 7
return "{} week(s) and {} day(s).".format(weeks, remainder)
print(readable_timedelta(10))
>>> 1 week(s) and 3 day(s).
4. 변수 범위(variable scope)
- 변수 범위 : 프로그램에서 변수를 참조하거나 사용할 수 있는 부분을 나타냅니다.
- 함수에서 변수를 사용할 때는 반드시 범위를 고려해야 합니다.
- 함수 내에서 변수를 만들었다면, 그 변수는 해당 함수 내에서만 사용할 수 있습니다.
- 그 함수 외부에서는 그 변수에 액세스할 수 없습니다.
def some_function():
word = "hello"
print(word)
# 오류가 납니다.
- word 변수는 각 함수에만 한정된 로컬 범위를 갖습니다. 즉 다른 함수에서도 변수에 word를 사용할 수 있습니다.
def some_function():
word = "hello"
def another_function():
word = "goodbye"
- 반면, 함수 외부에서 정의한 변수는 함수 안에서도 액세스할 수 있습니다.
- 아래의 코드에서 word 는 전역 범위를 갖습니다.
word = "hello"
def some_function():
print(word)
- 하지만 전역 범수의 값은 함수 안에서 변경할 수 없습니다.
- 만약, 함수 안에서 그 변수의 값을 변경하려면 그 변수를 인수로써 함수에 전달해야 합니다.
egg_count = 0
def buy_eggs():
egg_count += 12 # purchase a dozen eggs
buy_eggs()
- 위의 예에서 첫 줄에 있는 변수 egg_count가 전역 범위를 갖기 때문에 이 코드는 UnboundLocalError를 냅니다.
- 변수가 인수로서 함수에 전달되지 않았으므로 함수는 참조되고 있는 egg_count를 전역 변수로 간주합니다.
- 아래와 같이 하면 오류가 해결됩니다.
egg_count = 0
def buy_eggs(count):
return count + 12
egg_count = buy_eggs(egg_count)
728x90
반응형
'코딩공부 > Python' 카테고리의 다른 글
(파이썬) 람다(lambda)함수 개념과 예시 및 map, filter 함수와 같이 응용하기 (0) | 2024.06.11 |
---|---|
(파이썬) def 함수 문서화하기 위한 독스트링(docstring) 쉽게 알아보기 (1) | 2024.06.11 |
(파이썬) 리스트 컴프리헨션(List Comprehension)과 사용하는 이유 (0) | 2024.06.10 |
(파이썬) 반복문에서 편리하게 사용가능한 zip과 enumerate 내장 함수 (0) | 2024.06.10 |
(파이썬) for 반복문과 while 반복문에서 break 와 continue 사용하기 (1) | 2024.06.10 |