<3-2주차 수강 클립>
01. Python Programming 기초
19. 함수 이해 및 활용 - 01. 함수의 이해 및 활용, 기본 파라미터, 키워드 파라미터 이해, 변수의 스코프 이해
20.함수 이해 및 활용 - 02. 함수의 이해 및 활용, 기본 파라미터, 키워드 파라미터 이해, 변수의 스코프 이해
21.함수 이해 및 활용 - 03. 함수의 이해 및 활용, 기본 파라미터, 키워드 파라미터 이해, 변수의 스코프 이해 - 3
이번 주차에는 여러 번 사용되는 기능을 '함수'로 만들어 코드를 재사용하는 법에 대해 배웠는데요,
함수의 개념을 이해하고 '입력'과 '출력'의 역할 등을 알아보았습니다
>>수강 인증샷<<
-함수
주어진 입력(input)에 대해서 의도된 출력(output)을 전달하는 역할
ex) range(입력: 정수, 출력: 범위 내의 정수를 원소로 갖는 리스트)
sum(입력: 리스트, 튜플 etc, 출력: 전체 원소들의 합)
len(입력: 리스트, 튜플 etc, 출력: 전체 원소들의 개수)
위의 함수들은 모두 파이썬 내부에 이미 정의(구현)되어 있는 함수임 → 내장함수(빌트인 함수)
-함수 정의하기
1. 정의 시 최초에 def 키워드 사용 (definition의 약자)
2. argument 정의 (함수에 '입력'으로 전달하는 값을 의미, parameter=파라미터 라고도 부름)
3. :(콜론) 함수 역시 코드 블록이기 때문에 콜론 필요
4. body: 함수의 구현부분, 들여쓰기 된 부분까지 함수로 인지
4-1. 함수가 해당 기능을 수행하고 완료된 값(output)을 전달하기 위해 return 키워드를 사용할 수 있음
4-2. return 키워드 이후에 오는 값을 함수 호출한 곳(caller)으로 전달함
5. 함수의 네이밍: 어떤 기능을 하는 함수인지 이름으로 최대한 나타날 수 있게 짓기! (의미와 반대되거나 맞지 않는 이름은 사용 금지)
-함수의 사용(호출)
함수명(파라미터1, 파라미터2, ..., 파라미터n)
파라미터가 없는 함수의 경우 호출 시 입력값 입력x
-파라미터(parameter) 혹은 아규먼트(argument) 혹은 인자
함수에 전달되는 입력(input)이 됨
입력이 필요할 수도, 필요하지 않을 수도 있음
파라미터로 int, string, float, bool, list, dict ... 어떤 타입의 객체도 전달 가능, 심지어 함수 또한 함수의 입력값이 될 수 있음!
파이썬의 경우 (c++과 같은)입력 타입의 명시가 없기 때문에 함수 생성 시 의도된 파라미터의 타입에 맞게 입력을 전달하는 게 중요!
-디폴트 파라미터(기본 인자)
함수의 파라미터에 기본값 지정 가능
함수의 호출 시 해당 파라미터로 입력값을 명시(전달)하지 않을 경우, 함수 정의 시 미리 지정된 기본값으로 대체됨!
def add(x, y, z=5):
s = x + y + z
return s
add(10, 20) #z자리에는 5가 대입됨
ex) print함수(내장 함수): sep, end, file 등 여러 디폴트 파라미터를 가지는 함수
*)디폴트 파라미터 뒤에 일반 파라미터가 위치할 수 없음!! 디폴트 파라미터가 언제나 파라미터들의 뒷쪽에 위치해야 한다
-키워드 파라미터
파이썬의 경우, 파라미터에 값을 전달할 때 파라미터의 이름을 명시하여 전달 가능
파라미터 이름을 사용하지 않을 경우, 기본적으로 순서에 맞게 전달
def test(x, y, z):
a = x + y + z
return a
print(test(x=10, y=20, z=3)) #파라미터 이름을 명시하고 입력값 전달 가능
print(test(x=10, z=3, y=20)) #순서 변경도 가능
-리턴 (return)
기본적으로 함수의 종료를 명시 (어떤 함수든 return문을 만나면 그 아래에 남은 코드의 유무에 관계없이 함수 종료!)
return 키워드 옆에 값이나 수식이 있다면 해당 값을 호출자(caller=함수를 호출한 곳)에게 반환(전달)
return 키워드만 존재한다면 None 값을 반환
return이 없는 경우, 기본적으로 함수 코드 블록이 종료되면 함수의 종료로 간주. 이 때도 None을 반환
-복수 값 반환 (multiple return)
리턴 타입이 tuple인 경우 복수 개의 값을 리턴할 수 있음 → tuple사용의 가장 큰 이유!!
def add_mul(x, y):
s = x + y
m = x * y
return s, m #복수개의 값을 반환시키는 것'처럼'보이지만 tuple타입의 값을 반환하는 것
c = add_mul(20, 3)
a, b = add_mul(20, 3) #tuple unpacking을 이용해 값을 받을 수도 있음
-변수의 범위 (variable scope)
변수가 참조 가능한 코드 상의 범위를 명시
함수 내의 변수는 자신이 속한 코드 블록이 종료되면 소멸됨
1. 지역 변수(local variable): 특정 코드 블록 내에서 선언된 변수
2. 전역 변수(global variable): 가장 상단에서 정의되어 프로그램 종료 전까지 유지되는 변수
→ 같은 이름의 지역변수와 전역변수가 존재할 경우, 지역변수의 우선순위가 더 높음
-가변길이 인자 (variable length argument)
함수로 전달되는 파라미터의 개수가 고정적이지 않고 동적인 경우 사용됨
ex) print함수, format함수
1. 가변 파라미터 *args : 함수의 입력 파라미터 개수가 정해져 있지 않을 때 파라미터를 튜플 형태로 전달
#가변 파라미터
print()
print(1)
print(1, 2)
print(1, 2, 3)
print(1, 2, 3, 4)
가변길이 파라미터로 바꾸고 싶다면 함수 정의 시 파라미터 앞에 '*' 한 개 붙여주기!
def test(*args): #arguments (관례적으로 가변길이 파라미터 'args' 라고 씀)
for item in args: #for loop로 tuple을 순회하면서 각각 출력을 할 수 있음
print(item)
test(10, 20, 30, 40, 50, 60) #호출하는 입장에서 입력값을 동적으로 줄 수 있음
함수를 호출하는 입장에서는 가변길이 함수
함수를 정의하는 부분에서는 '가변길이 인자'는 '튜플'로 인식!
2. 가변 키워드 파라미터 *kwargs : 동일한 상황에서 파라미터를 딕셔너리 형태로 전달, 즉 함수 호출 시 파라미터의 이름과 값을 함께 전달 가능
def test2(**kwargs): #key word arguments의 줄임말 (관례)
for key, value in x.items(): #기존 딕셔너리만 순회할 경우 key값만 참조하므로 items()함수 사용
print('key:', key, ', value: ', value)
test2(a=1, b=2, c=3, name='Bob', age=90)
역시 함수를 호출하는 입장에서는 가변길이 함수
함수를 정의하는 부분에서는 '가변길이 키워드 인자'는 '딕셔너리'로 인식!
-가변길이 함수의 대표적인 예 문자열 포맷 함수
여러가지 값과 포맷을 이용하여 문자열을 정의할 수 있는 문자열 메소드
{} (=placeholder)를 문자열 내에 위치시킨 후, 해당 위치에 format함수로 전달된 값으로 대체하여 문자열을 생성함
a = '오늘 온도: {}도, 강수 확률: {}%' #placeholder로 값을 저장할 공간을 확보, 나중에 특정 값을 넣겠다
print(a) #그냥 출력할 경우 {}를 문자열로 인식함
#placeholder의 이름 x 경우 _ 가변길이 파라미터 (tuple)
a = '오늘 온도: {}도, 강수 확률: {}%'.format(20, 50) #placeholder(파라미터)의 순서에 맞게 입력값 전달
print(a)
#placeholder의 이름 짓기 _ 가변길이 키워드 파라미터로 값 전달 (dict)
a = '오늘 온도: {today_temp}도, 강수 확률: {today_prob}%, 내일 온도: {tomor_temp}도'.format(today_temp=20, today_prob=50, tomor_temp=23)
print(a)
강의 링크: https://bit.ly/3cB3C8y
'코딩 > 머신러닝&데이터 분석 강의' 카테고리의 다른 글
[머신러닝 인강] 4-2주차: 클래스와 인스턴스 (0) | 2021.03.14 |
---|---|
[머신러닝 인강] 4-1주차: lambda 함수의 이해, 파이썬 모듈 (0) | 2021.03.12 |
[머신러닝 인강] 3-1주차: 조건문과 반복문 (0) | 2021.03.02 |
[머신러닝 인강] 2-2주차: 조건문과 반복문 (0) | 2021.02.27 |
[머신러닝 인강] 2-1주차: 데이터 타입과 컬렉션 (0) | 2021.02.24 |