5 함수

2023. 10. 23. 17:22프로그래밍 공부/Python

5.1 프로그램 루틴

5.1.1 함수 루틴이란? 

프로그램 루틴(routine): 몇 가지 작업을 수행하는 명명된 명령어 그룹.

루틴은 주어진 프로그램에서 필요한 횟수만큼 호출(호출)될 수 있다.

함수(function): 파이썬 버전의 프로그램 루틴

 

5.1.2 함수 정의하기

def avg(n1, n2, n3):  -> 함수 헤더(Function Header)

     ----                        -> 함수 바디(Function Body) (suite)

     ----                        -> 함수 바디(Function Body) (suite)

 

실제 인수(actual argument) 또는 단순히 "인수"(argument): 연산할 함수에 전달되는 값
형식 매개변수(formal parameter) 또는 단순히 "매개변수"(parameter): 전달된 인수의 "자리 표시자"

 

값 반환 함수(Value-Returning Functions)

값 반환 함수: 반환 값을 요구하는 프로그램 루틴이므로 수학에서의 함수와 유사하다.

 

ex)

def avg(n1, n2, n3):
    return (n1 + n2 + n3) / 3.0

 

result = avg(10, 25, 16) * factor

 

값 미반환 함수(Non-Value-Returning Functions)

값 미반환 함수: 반환된 함수 값이 아닌 부수적인 효과(side effects)를 위해 호출된 함수이다.

값 미반환 함수는 시스템상으로 None 을 반환한다.

 

ex)

def hello(name):
    print('Hello', name + '!')

 

name = 'John'

hello(name)


5.2 More on Functions

5.2.1 값 반환 함수 호출

값 반환 함수에 대한 함수 호출은 함수의 반환 값이 적절한 장소에서 사용할 수 있다.

 

function definition
def maxmin(num_list):
    return (max(num_list), min(num_list))

 

function use
weekly_temps = [45, 30, 52, 58, 62, 48, 49]
(a) highlow_temps = maxmin(weekly_temps)
(b) high, low = maxmin(weekly_temps)

 

5.2.2 값 미반환 함수 호출

값 미반환 함수에 대한 함수 호출은 실행 가능한 문이 허용되는 모든 곳에서 사용할 수 있다.

 

ex)

def sayHello():
    print('Hello!')

 

sayHello()

 

5.2.3 매개변수 전달(Parameter Passing)

실질 인수(Actual Argument) vs. 형식 매개변수(Formal Parameters)

실제 인수와 형식 매개 변수의 대응 관계는 인수 이름이 아닌 전달된 인수의 순서에 따라 결정된다.

 

ex)

def ordered(n1, n2):    # n1, n2가 형식 매개변수

    return n1 < n2

 

birthYr = int(input('Year of birth? '))

HSGradYr = int(input('Year of graduated high school? '))

colGradYr = int(input('Year of graduated college? '))

 

while not (ordered(birthYr, HSGradYr) and    # birthYr, HSGradYr가 실질 인수

                  ordered(HSGradYr, colGradYr)):   # HSGradYr, colGradYr가 실질 인수

    print('Invalid Entry - Please Reenter')

    birthYr = int(input('Year of birth? '))

    HSGradYr = int(input('Year of graduated high school? '))

    colGradYr = int(input('Year of graduated college? '))

 

가변 vs. 불변 인수(Mutable vs. Immutable Arguments)

함수에 인수로 전달될 때 가변형 인수만 변경될 수 있다.

일반적으로 함수의 결과는 함수의 반환 값을 거쳐야 하며 변경된 매개 변수를 통해서는 안 된다.

 

불변 인수 예시)

def countDown(n):
    while n >= 0:
        if (n != 0):
            print(n, '..', end='')
        else:
            print(n)
        n = n - 1

 

num_tics= 10

>>>countDown(10)

>>>num_tics

10

불변 인수인 num_tics의 값은 변경되지 않았다.

 

가변 인수 예시)

def sumPos(nums): 
    for k in range(0, len(nums)): 
        if nums[k] < 0:
            nums[k] = 0 

    return sum(nums) 

 

>>> nums_1 = [5, 22, 9, 4, 2 6, 1]

>>> total = sumPos(nums_1)

>>> total

19

>>> nums_1

[5,0,9,4,0,1]

가변 인수인 nums_1의 실제 요소들이 변경되었다.

 

5.2.4 키워드 인수 in 파이썬

위치 인수(positional argument): 인수 목록에서 위치에 따라 특정 파라미터에 할당되는 인수

def mortgage_rate(amount, rate, term)

monthly_payment = mortgage_rate(350000, 0.06, 20)

 

키워드 인수(keyword argument): 파라미터 이름으로 지정되는 인수

def mortgage_rate(amount, rate, term)

monthly_payment = mortgage_rate(rate = 0.06, term = 20, amount = 350000)

 

5.2.5 기본 인수 in 파이썬

기본 인수(defualt argumenta): 주어진 함수 호출에서 선택적으로 제공할 수 있는 인수
제공되지 않을 경우 해당 파라미터는 기본값을 제공한다.

def mortgage_rate(amount, rate, term 5 20)

monthly_payment = mortgage_rate(35000, 0.62)

 

5.2.6 다양한 범위

지역 범위와 지역 변수

지역 변수(Local Variable): 그것이 존재하는 함수 안에서만 접근할 수 있는 변수 

지역 범위(Local Scope): 지역 변수가 가지고 있는 범위

 

def func1():

    n = 10

    print('n in func1 = ', n)

 

def func2():

    n = 20

    print('n in func2 before call to func1 = ', n)

    func1()

    print('n in func2 after call to func1 = ', n)

>>>func2()

n in func2 before call to func1 = 20

n in func1 = 10

n in func2 after call to func1 = 20

 

전역 범위와 전역 변수

전역 변수(Global Variable): 함수 정의 밖에서 정의되는 변수

전역 범위(Global Scope): 전역 변수가 가지고 있는 범위.

전역 변수를 사용하는 것은 나쁜 프로그래밍 관행으로 여겨진다.

 

max = 100 # global variable

def func1(count):

    if count < max:  # global variable max accesssed

 

def func2(count):

    for i in range(1, max): # global variable max accessed

 

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

7 모듈러 디자인  (1) 2023.10.23
6 객체와 사용  (0) 2023.10.23
4 리스트  (1) 2023.10.23
3 제어 구조  (0) 2023.10.22
2 데이터와 표현  (0) 2023.10.21