[AIVLE SCHOOL] 데이터 다루기(8) - 함수

춤추는 머쉬룸·2024년 9월 10일

AIVLE SCHOOL 6기

목록 보기
11/80
post-thumbnail

9/10 2, 3, 4, 5, 6세션

A. 함수 (def)

A-1. 입력

  • return 으로 반환
  • 반환 할 것이 있는데, 아무도 받지 않으면 print 로 뿌려버린다.
  • return 이 없으면 반환하는 것이 없다.
  • return 뒤에 ()를 하면 튜플를 반환한다는 것이다. (생략가능)
> def hello():
>     return '안녕하세요? 반갑습니다.'

> a = hello()
> print(a)

A-2. 매개변수

  • 매개변수가 없으면 오류 발생
  • 매개변수에 전달되는 값을 위치 인수라고 함
> def hello(name):
>     print(f'{name}님 안녕하세요? 반갑습니다!')

# 함수 사용
> hello('홍길동')

A-2-1) 기본 인수(Default Argument)

  • 매개변수 = 값 형태로 기본값 지정 가능
  • 인수를 전달하지 않으면 기본값이 사용됨
# 함수 만들기
> def hello(name='여러분'):
>     print(f'{name}님 안녕하세요? 반갑습니다!')

# 함수 사용
> hello() # --> 여러분이 들어감

A-2-2) 키워드 인수 (Keyword Argument)

  • 매개변수=값 형태로 매개변수 이름을 지정하면 전달되는 순서를 바꿀 수 있음
  • 매개변수 순서에 맞게 값을 넣으면 매개변수 이름을 생략 가능

A-3. 가변 인수 (Arbitrary Argument)

  • 임의 개수의 값이 매개변수에 전달되는 인수
  • 대부분 함수 안에서 반복문을 사용해 처리
  • 튜플 형태로 전달함
> def hello(*args):
>     for who in args:
>         print(f'{who}님 안녕하세요? 반갑습니다!')

# 함수 사용
> hello('홍길동', '일지매', '강우동')

홍길동님 안녕하세요? 반갑습니다!
일지매님 안녕하세요? 반갑습니다!
강우동님 안녕하세요? 반갑습니다!

A-3-1) 리스트를 가변인수로 활용

만약 리스트 형태로 넣으면? 값이 하나만 들어간 것이 된다!

> a_list = ['홍길동', '일지매', '강우동']
> hello(a_list)

['홍길동', '일지매', '강우동']님 안녕하세요? 반갑습니다!

대신에 *a_list 를 넣으면 원하는 결과가 나온다.

TIP! * 는 하나씩 자른다는 의미. 낱개씩 처리하라!

hello(*a) == hello(a[0], a[1], a[2] ...)

A-3-2) 딕셔너리를 가변인수로 활용

  • ** 를 사용하면 딕셔너리 값을 하나씩 전달한다는 의미이다.
  • items() 메서드와 함께 사용한다.
> def hello2(**args):
>     for who, age in args.items():
>        print(f'{who}의 나이는 {age}살 입니다.')

# 함수 사용
> b_dic = {'홍길동' : 10, '일지매' : 30, '강우동' : 50}
> hello2(**b_dic)

홍길동의 나이는 10살 입니다.
일지매의 나이는 30살 입니다.
강우동의 나이는 50살 입니다.

A-3-3) 위치 인수와 가변 인수 함께 사용

  • 위치 인수를 가변 인수 앞에 둘 수 있다.
  • 가변 인수 뒤에 위치 인수를 둘 수는 없다.
  • 만약 가변 인수 뒤에 위치인수를 두고 싶으면 키워드 인수를 사용해야 한다.
  • 그러나 키워드 인수는 가변 인수 앞에 둘 수는 없다.

가능

# 1. 위치 인수를 가변 인수 앞에 두기
def hello(title, *args):

hello('선생님', '홍길동', '일지매', '강우동')

# 2. 가변 인수를 앞에, 키워드 함수를 뒤에 두기
def hello(*args, title):

hello('홍길동', '일지매', '강우동', title='선생님')

불가능

# 1. 키워드 인수를 가변 인수 앞에 두기
> def hello(title, *args):

> hello(title='선생님', '홍길동', '일지매', '강우동')

# 2. 가변 인수 뒤에 키워드 없이 위치 인수 두기
> def hello(*args, title):

> hello('홍길동', '일지매', '강우동', '선생님')

A-2. 출력

  • return 문 사용. 반환과 동시에 함수가 종료.
  • return 아래에 있는 라인은 실행되지 않음.
  • 반환되는 값이 없는 함수의 결괏 값을 받아 출력하면 None 출력
  • 여러 개의 결괏값을 반환할 수도 있음 (튜플로 반환)
> def calculate2(a, b):
>     summ = a + b
>     mult = a * b
>     return summ, mult

# 함수 사용
> r1, r2 = calculate2(10, 5)
> print(r1)
> print(r2)

15
50

B. 예외처리

  • 발생 가능한 입력 오류에 대해서 적절히 예외처리 해야 에러가 발생하지 않는다

C. 변수 우선순위

  • L : Local - 함수 안에서 선언된 함수
  • E : Enclosing - 함수가 함수를 호출한 경우, 안쪽 함수 입장에서 밖에 함수가 선언한 변수
  • G : Global - 함수 밖에서 선언한 전역변수
  • B : Built-in - 파이썬이 기본적으로 제공하는 함수
  • 함수 안에서 리스트를 참조하면 함수 밖의 리스트가 참조된다

C-1) 전역 변수 사용

> a = list(range(1, 11))

> def test():
    a[0] = 10
    a.append(11)
    print(f'안쪽 a : {a}')

> test()
> print(f'바깥쪽 a : {a}')

안쪽 a : [10, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
바깥쪽 a : [10, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

C-2) 파라미터로 넘기기

> a = list(range(1, 11))

> def test(x):
    x[0] = 10
    x.append(11)
    print(f'안쪽 a : {a}')

> test(a)
> print(f'바깥쪽 a : {a}')

안쪽 a : [10, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
바깥쪽 a : [10, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

C-3) 지역 변수 사용

> a = list(range(1, 11))

> def test():
    a = [1, 2, 3] # 지역 변수 선언
    a[0] = 10
    a.append(11)
    print(f'안쪽 a : {a}')

> test()
> print(f'바깥쪽 a : {a}')

안쪽 a : [10, 2, 3, 11]
바깥쪽 a : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

D. 내장함수

D-1) eval() 함수

  • 문자열을 수식으로 인식하여 계산
> def calculate1(n1, n2, s):
    return eval(f'{n1} {s} {n2}')

> calculate1(11, 2 , '*')
22

0개의 댓글