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