본문 바로가기

코딩/머신러닝&데이터 분석 강의

[머신러닝 인강] 3-2주차: 함수 이해 및 활용, 기본 파라미터, 키워드 파라미터 이해, 변수의 스코프 이해

<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

 

반응형