ABOUT ME

AIFFEL대전에서 인공지능을 시작했다. 새로운 시작이다. 녹녹치는 않다. 하지만 해볼만 하다.

Today
Yesterday
Total
  • [파이썬]07. 함수
    파이썬 2022. 3. 29. 14:05

    [파이썬]07. 함수

    1. 함수 기본

    2. 변수의 유효범위 

    3. 함수 심화

    4. 제너레이터와 yield

    ===============================

     

    [파이썬]07. 함수

     

    1. 함수 기본

    (1) 함수 개념

    - 특정 값X를 인자로 받고, 결과값을 반환 : Y = f(X)

    - 함수가 필요할 때마다 호출 가능

    - 논리적인 단위로 분할 가능

    - 코드의 캡슐화(capsulation)

    - 중복되는 소스코드를 최소화

    - 소스코드의 재사용성을 높임

     

    (2) 함수 선언

    - 함수 선언문법

    def 함수명(매개변수):
      <수행문>
      return <반환값>

    - def : 정의definition의 줄임으로 사용

    - 함수명 : 사용자가 임의로 지정

    - 함수명 컨벤션(convention)

      º 짧고 명료한 이름

      º 소문자로 입력

      º 띄어쓰기는 '_'기호 사용(hell_world)

      º 동사와 명사를 함께 사용(fine_name)

    - 매개변수(parameter) : 함수에서 입력값으로 사용하는 변수

    - 반환값 : 함수에서 반환할 결과값 지정

     

    (3) 매개변수와 반환값이 없는 함수

    - 함수에 매개변수와 반환값이 없이 사용 가능

    - 함수를 호출하면 함수의 수행문이 실행

    def hello():
        print('Hello Python')
    
    hello()

    (4) 매개변수만 있는 함수

    - 문자열 매개변수를 사용한 함수

    def hello(string):
        print('Hello', string)
    
    hello('world')

    (5) 반환값만 있는 함수

    - 문자열 반환값을 사용한 함수

    def hello():
        return "Hello Python"
    
    hello()

    (6) 매개변수와 반환값이 있는 함수

    - 정수형 매개변수와 반환값을 사용한 함수

    def square(num):
        return num * num
    
    square(5)

    (7) 매개변수가 여러 개 있는 함수

    - 정수형 매개변수 여러 개를 사용한 함수

    - 매개변수를 지정하여 호출 가능

    def add(n1, n2):
        return n1 + n2
    
    print(add(5,8))
    print(add(n2=5,n1=8))

    (8) 키워드 매개변수

    - 함수의 매개변수를 변수명을 지정하여 호출 가능

    def add(n1, n2):
        return n1 + n2
    
    print(add(n2=5,n1=8))

    (9) 가변 매개변수

    - 매개변수가 몇 개인지 알 수 없을 때 사용

    - 매개변수 앞에 '*'을 표시

    def sum(*args):
        result = 0
        for i in args:
            result += i
        return result
    
    print(sum(1,2,3))
    print(sum(1,2,3,4,5))
    def sum(*args):
        result = 0
        print(type(args))
        for i in args:
            print(i)
    
    print(sum(1,2,3))
    print(sum(1,2,3,4,5))

    (10) 가변 키워드 매개변수

    - 매개변수의 이름을 따로 지정하지 않고 사용

    - 매개변수 앞에 '**'을 표시

    def print_kwargs(**kwargs):
        print(type(kwargs))
        print(kwargs)
    
    print_kwargs(n1 = 5, n2 =8)
    print_kwargs(id = 'Python', pw = '1234')

    (11) 초기값 매개변수

    - 매개변수에 초기값을 설정하여 사용

    - 함수에 매개변수를 사용하지 않을 때 초기값을 사용

    def power(b = 2, n = 2):
        return pow(b, n)
    
    print(power())
    print(power(3))
    print(power(5, 3))
    print(power(n = 3))

    (12) 여러 반환값이 있는 함수

    - 함수의 반환값은 하나

    - 여러 반환값을 사용할 경우 튜플 형태로 반환

    def plus_and_minus(n1, n2):
        return n1 + n2, n1 - n2
    
    result = plus_and_minus(8, 5)
    print(result)
    
    result1, result2 = plus_and_minus(8,5)
    print(result1, result2)

    (13) 예제 : 계산기 함수

    - 두 수에 대해서 덧셈, 뺄셈, 곱셈, 나눗셈을 수행하는 함수

    def calc(op, n1, n2):
        result = 0
        if op == '+':
            result = n1 + n2
        elif op == '-':
            result = n1 - n2
        elif op == '*':
            result = n1 * n2
        elif op == '/':
            result = n1 / n2
        return result
    
    print(calc('+', 8, 5))
    print(calc('*', 8, 5))

    (14) 예제 : 가변 매개변수의 평균값 계산

    - 가변 매개변수로 들어오는 모든 수의 평균값 계산

    def avg(*args):
        sum = 0 
        for i in args:
            sum += i
        return sum / len(args)
    
    print(avg(1,2,3,4,5,6,7))

     

    2. 변수의 유효범위 

    (1) 유효범위

    - 변수는 유효한 범위가 존재

    - 함수 안에서 선언된 변수는 함수 내부에서 유효함.

    def var_scope(a):
        a = a + 1
    
    a = 10
    var_scope(a)
    print(a)

    (2) 변수의 종류

    - 지역변수 : 한정된 지역에서만 사용되는 변수

    - 전역변수 : 프로그램 전체에서 사용되는 변수

    a = 10
    def func1():
        a = 20
        print(a)
    
    def func2():
        print(a)
    
    func1()
    func2()

    (3) 전역 변수 사용 global

    - 함수 내부에서 전역 변수를 사용하기 위한 global 키워드

    a = 10
    def func1():
        global a
        a = 20
        print(a)
    
    def func2():
        print(a)
    
    func1()
    func2()

     

    3. 함수 심화

    (1) 내부함수(Nested Function)

    - 함수 안에 함수가 존재

    - 내부함수는 외부에서 호출 불가

    def func1(n1, n2):
        def func2(num1, num2):
            return num1 + num2
        return func2(n1, n2)
    
    print(func1(5,8))
    # print(func2(5,8))  #에러 내부함수를 호출할 수 없다.

    (2) 재귀함수(Recursive Function)

    - 함수가 자기 자신을 다시 부르는 함수

    - count() 함수 내부에서 count()함수를 호출

    - 재귀적으로 카운트 수를 출력

    def count(n):
        if n >= 1:
            print(n, end=' ')
            count(n - 1)
        else:
            return
    
    count(10)

     

    1) 예제 : 재귀함수를 이용한 합계

    - sum()함수 내부에서 sum()함수를 호출

    - 재귀적으로 합계를 계산

    def sum(n):
        if n == 1:
            return 1
        else:
            return n + sum(n - 1)
    
    print(sum(10))

    2) 예제 : 팩토리얼 함수

    - 팩토리얼함수factorial function는 대표적인 재귀함수

    - 팩토리얼 함수 : n! = 1*2*3*....*(n-2)*(n-1)*n

    def factorial(n):
        if n == 1:
            return 1
        else:
            return n * factorial(n - 1)
    
    print(factorial(3))
    print(factorial(5))
    print(factorial(10))

    (3) 람다 함수

    1) 람다함수

    - 함수를 한 줄로 간결하게 만들어 사용

    def add(n1, n2):
        return n1 + n2
    
    print(add(5,8))
    
    add2 = lambda n1, n2 : n1 + n2
    print(add2(5,8))

    2) map()

    - map() : built-in함수로 list나 dictionary와 같은 iterable한 데이터를 인자로 받아 list안의 개별 item을 함수의 인자로 전달하여 결과를 list로 형태로 반환해 주는 함수

    - 람다 함수와 map()함수를 이용한 리스트 계산

    li = [1,2,3,4,5]
    square = lambda n : n * n
    li = list(map(square,li))
    print(li)

    3) filter()

    - filter()함수 : iterable한 데이터를 인자로 개별 item을 특정 조건에 해당하는 값으로만 필터링

    - 람다 함수와 filter()함수를 이용한 

    li = list(range(10))
    print(li)
    evens = filter(lambda n: n % 2 is 0, li)
    print(list(evens))

    4) reduce()

    - reduce()함수 : iterable한 데이터를 인자로 받아 개별 item을 축약하여 하나의 값으로 만들어 가는 과정

    - 람다 함수와 reduce()함수를 이용한 리스트 계산

    import functools 
    li = list(range(10))
    print(li)
    sum = functools .reduce(lambda x, y: x + y, li)
    print(sum)
    len = functools .reduce(lambda x, y: x + 1, li, 0)
    print(len)
    max = functools .reduce(lambda x, y: x if x > y else y, li)
    print(max)

     

    4. 제너레이터와 yield

    - 함수 안에서 yield를 사용하면 제너레이터

    - yield : 함수를 끝내지 않고 값을 계속 반환

    def gen():
        yield 1
        yield 2
        yield 3
    
    print(gen())
    print(list(gen()))
    for i in gen():
        print(i)
    g = gen()
    print(next(g))
    print(next(g))
    print(next(g))

    예제 : 짝수만 생성하는 제너레이터

    - 0 ~ n개의 숫자 중에서 짝수만 생성하는 제너레이터 함수 생성

    def gen_even(n):
        for i in range(n):
            if i % 2 == 0:
                yield i
    
    for i in gen_even(10):
        print(i)

     

    '파이썬' 카테고리의 다른 글

    [파이썬]09. 모듈과 패키지  (0) 2022.03.31
    [파이썬]08. 객체와 클래스  (0) 2022.03.30
    [파이썬]06. 입력과 출력  (0) 2022.03.28
    [파이썬]03. 문자열  (0) 2022.03.27
    [파이썬]02. 변수/자료형/연산자  (0) 2022.03.27
Designed by Tistory.