함수 : 어떤 일을 수행하는 코드의 덩어리, 또는 코드의 묶음
함수의 장점
1. 필요할 때마다 호출 가능
2. 논리적인 단위로 분할 가능
3. 코드의 캡슐화
파이썬에서 함수를 선언하는 방법
def 함수이름 (매개 변수1, 매개 변수2, ..):
명령문1
명령문2
return <반환값>
def : 함수의 정의를 시작한다는 의미
함수 이름 : 파이썬에 흔히 통용되는 규칙(필수x)
• 소문자 입력
• 띄어쓰기를 할 경우에는 _ 기호 사용
• 작업을 나타내기 위해 동사와 명사를 함께 사용하는 경우 가 많음
• 외부에 공개하는 함수일 경우 줄임말을 사용하지 않고 짧고 명료한 이름으로 정함
매개 변수 : 매개변수는 함수에서 입력값으로 사용하는 변수를 의미하며, 1개 이상의 값을 적을 수 있음.
명령문 : 명령문은 반드시 들여쓰기한 후 코드를 입력해야 함.
<넓이를 구하는 함수 호출>
def calculate_rectangle_area(x, y):
return x * y
rectangle_x = 10
rectangle_y = 20
print("사각형 x의 길이:", rectangle_x)
print("사각형 y의 길이:", rectangle_y)
# 넓이를 구하는 함수 호출
print("사각형의 넓이:", calculate_rectangle_area(rectangle_x, rectangle_y))
결과 : 사각형 x의 길이: 10
사각형 y의 길이: 20
사각형의 넓이: 200
<함수에 해당하는 f(x)와 g(x)의 내용을 코드로 작성하기>
def f(x):
return 2 * x + 7
def g(x):
return x ** 2
x = 2
print(f(x) + g(x) + f(g(x)) + g(f(x)))
결과 : 151
함수의 형태
매개변수와 반환값의 유무에 따라 함수를 형태로 구분합니다.

def a_rectangle_area(): # 매개변수 × , 반환값 ×
print(5 * 7)
def b_rectangle_area(x, y): # 매개변수 ◯ , 반환값 ×
print(x * y)
def c_rectangle_area(): # 매개변수 × , 반환값 ◯
return(5 * 7)
def d_rectangle_area(x , y): # 매개변수 ◯ , 반환값 ◯
return(x * y)
a_rectangle_area()
b_rectangle_area(5, 7)
print(c_rectangle_area())
print(d_rectangle_area(5, 7))
결과 : 35
35
35
35
def f(x):
y = x
x = 5
return y * y
x = 3
print(f(x))
print(x)
결과 : 9
3
3행과 6행에서 함수f(x)의 x에 5와 3이 입력됩니다. 함수 안에서의 x와 함수 밖에서의 x는 값은 변수인지 판단해야 합니다. 함수가 변수를 호출하는 방식은 값에 의한 호출과 참조 호출이 있습니다.

메모리 주소 : 변수가 저장되는 공간으로 그 공간 자체에 새로운 값을 할당하면 그 공간을 가리키고 있는 다른 변수에도 영향을 줍니다. 위의 코드에서 만약 참조 호출로 적용된다면 맨 마지막에 있는 x의 값은 5로 변환되어야 하지만 파이썬은 객체의 주소가 함수로 넘어간다는 뜻의 객체 호출 방식을 사용합니다.
def spam(eggs):
eggs.append(1) # 기존 객체의 주소값에 [1] 추가
eggs = [2, 3] # 새로운 객체 생성
ham = [0]
spam(ham)
print(ham)
결과 : [0, 1]

변수의 사용 범위 : 변수가 코드에서 사용되는 범위
변수의 사용 범위를 결정할 때 고려해야 할 두가지 변수
1. 지역 변수 : 함수 내부에서만 사용
2. 전역 변수 : 프로그램 전체에서 사용
def test(t):
print(x)
t = 20
print("In Function:", t)
x = 10
test(x)
print("In Main:", x)
print("In Main:", t)
결과 : 10
In function: 20
In Main: 10
Traceback (most recent call last):
File "scoping_rule.py", line 9, in <module>
print("In Main:", t)
NameError: name 't' is not defined
-> 전역 변수 t에 대한 정의가 없기 때문에 오류가 발생합니다.