프로그래밍언어/Python

파이썬 - 함수의 기초

멍토 2020. 1. 17.

함수 : 프로그램에서 어떤 특정 기능을 수행할 목적으로 만들어진 재사용 구조의 코드 부분

함수의 장점

하나의 큰 프로그램을 여러 부분으로 나눌 수 있기 때문에 구조적 프로그래밍이 가능해짐
동일 함수를 여러 곳에서 필요할 때마다 호출할 수 있음
수정이 용이

함수 사용방법

순수 함수(pure function) : 결과값 반환 외에 외부에 영향을 주지 않는 함수
함수형 프로그래밍 지원 언어에서는 순수 함수를 인자, 반환값으로 사용

함수의 선언

def 함수명 (매개변수):
    명령문
    명령문
    return

함수 선언의 위치 문제

인터프리터 언어의 경우 함수의 선언위치가 매우 중요하다.

따라서 함수는 위쪽에 작성해주는 것이 좋다.


매개변수 : 함수 호출시 입력 밧을 전달 받기 위한 변수

전달받은 인자의 값에 의해 타입이 결정됨

선언된 매개변수 만큼의 인자만 전달됨

 

언팩 연산자(*) : 매개변수의 개수를 가변적으로 사용할 수 있도록 언팩 연산자(*) 제공

매개변수에 적용시 인자를 튜플형식으로 처리한다.

예제

def calc_sum(*params):
    total =0
    for val in params:
        total += val
    return total
ret_val = calc_sum(1,2)
print(ret_val)
=> 3
ret_val = calc_sum(1,2,3)
print(ret_val)
=> 6

 

명시적 매개변수와 가변 매개변수를 혼합사용하기 위해서는 가변 매개변수를 뒤에 전달하는 것이 좋다.

 

언팩 연산자를 이용하면 여러개의 반환값 처리가 가능하다

def calc_sum(*params):
    total1 =0
    total2 = 0.0
    for val in params:
        total1 += val
        total2 += val
    return total1, total2

 

키워드 언팩 연산자(**) : 매개변수의 개수를 가변적으로 사용할 수 있도록 함

키워드 인자들을 전달해 매개변수를 딕셔너리 형식으로 처리함

키1 = 값1, 키2 = 값2 형식으로 호출

def function(**params):
    for k in params.keys():
        print("{0}: {1}".format(k, params[k] )
function(a=1, b=2, c=3)

 

매개변수에 사용할 기본 값을 지정할 수 있으며, 기본값을 가진 매개변수는 일반 매개변수 앞에 위치할 수 없다.

def calc(x, y, operator = "+"):
    if operator == "+":
        return x + y
    else :
        return x - y


print(calc(2,1))
=> 3
print(calc(2,1,"-"))
=> 1

매개변수 함수에 입력값을 전달해야 하는가를 결정하는 요인
반환값 함수가 수행결과를 호출한 곳으로 돌려줄 필요가 있는가를 결정하는 요인

 

함수의 유형

매개변수와 반환값이 있는 함수
매개변수는 없고 반환 값이 있는 함수
매개변수는 있고 반환값이 없는 함수
매개변수와 반환값이 없는 함수

scope : 변수의 유효범위

어디서나 접근이 가능한 전역변수 : 전역 스코프
함수 내에서만 적븐이 가능한 지역변수 : 함수 스코프

 

변수에 접근하는 절차

1순위 함수 스코프 내에서 가장 먼저 변수를 찾는다.
2순위 함수 스코프 내에 없을경우 전역 스코프에서 변수를 찾는다.
지역변수와 전역변수의 이름이 같을경우 전역변수에 접근을 못할 수 있다. 이때 global을 앞에 기술하면 접근이 가능하다.

중첩함수 : 함수 내에 중첩함수를 선언해 사용 가능

중첩함수를 포함하는 함수 내에서만 호출이 가능함
중첩함수를 포함하는 함수의 스코프에도 접근이 가능함
함수 내에서 직접 선언해 호출할 수도 있고, 함수의 매개변수로 함수 인자를 전달받아 함수 내에서 호출해서 사용 가능
def calc(operator_fn, x, y):
    return operator_fn(x, y)
def plus(op1, op2) :
    return op1 + op2
def minus(op1, op2):
    return op1 - op2


print(calc(plus, 10, 5))
=> 15
print(calc(minus, 10, 5))
=> 5

람다식

Lambda 매개변수 : 반환값

변수에 저장해 재사용이 가능한 함수처럼 사용함
기존의 함수처럼 매개변수의 인자로 전달함
함수의 매개변수에 직접 인자로 전달함
def calc(operator_fn, x, y):
    return operator_fn(x, y)


print(calc(lambda a, b : a + b, 10, 5))
=> 15
print(calc(lambda a, b : a - b, 10, 5))
=> 5

클로저

중첩함수에서 중첩함수를 포함하는 함수의 scope에 접근가능
중첩함수 자체를 반환값으로 사용한다면?
  • 정보은닉 구현가능
  • 전역변수의 남용방지
  • 메서드가 하나밖에 없는 객체를 만드는 것보다 우아한 구현 가능

 

def outer_func():
    id = 0
    def inner_func():
        nonlocal id #inner_fucn의 지역변수가 아님을 선언
        id += 1
        return id
    return inner_func
make_id = outer_func()
print("make_id() 호출의 결과: {0}".format(make_id()))
print("make_id() 호출의 결과: {0}".format(make_id()))
print("make_id() 호출의 결과: {0}".format(make_id()))

원의 면적과 둘레구하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PI = 3.14
 
#입력받기
def input_radius():
   radius_str = input("반지름을 입력하세요: ")
   return float(radius_str)
 
#원의 면적
def calc_circle_area(r):
   return PI * r * r
 
#원의 둘레
def calc_circumference(r):
   return 2 * PI * r
 
radius = input_radius()
circle_area = calc_circle_area(radius)
circumference = calc_circumference(radius)
print("원의 면적: {0:0.2f}, 원의 둘레: {1:0.2f}".format(circle_area, circumference))

 

 

'프로그래밍언어 > Python' 카테고리의 다른 글

파이썬 - 예외처리  (0) 2020.01.19
파이썬 - 내장함수  (0) 2020.01.18
파이썬 - 흐름과 제어(반복)  (0) 2020.01.16
파이썬 - 웹데이터 가져오기  (0) 2020.01.15
파이썬 - 흐름과 제어(조건문)  (0) 2020.01.15

댓글

💲 광고입니다.