사용자 정의 함수란 사용자가 특정 작업을 수행하기 위해 직접 작성한 함수를 의미합니다. 파이썬에는 많은 내장 함수들이 있지만, 때로는 우리의 요구사항에 맞게 동작하는 함수를 직접 만들어야 할 때가 있습니다. 이때 사용자 정의 함수를 작성하게 됩니다.
def 함수명(매개변수1, 매개변수2, ...):
# 함수 내용
return 결과값
def func1():
print('처음으로 만드는 함수!')
func1()
func1()
for i in range(5):
func1()
def func2(num):
print(f'입력받은 숫자: {num}')
func2(10)
func2(4)
def func3(start, end):
sum = 0
for i in range(start, end+1):
sum += i
print(f'{start}부터 {end}까지의 합: {sum}')
func3(1, 10)
func3(1, 100)
def func1():
print('처음으로 만드는 함수')
func1()
temp = func1()
print(temp)
temp = func1
print(temp)
temp()
def func4():
return '🎁'
print(func4())
temp = func4()
print(f'temp에 저장된 값: {temp}')
def func5(num1, num2):
sum = num1 + num2
return sum
print(func5(10, 5))
temp = func5(4, 3)
print(temp)
print(func5(10)) # TypeError: func5() missing 1 required positional argument: 'num2'
def func6(num1=0, num2=0):
sum = num1 + num2
return sum
print(func6())
print(func6(10))
print(func6(10, 3))
# print(func6(, 3))
# print(func6(None, 3))
print(func6(num2=3))
함수를 호출할 때 *를 사용하면 시퀀스(리스트, 튜플 등)의 요소를 개별적인 위치 인자로 풀어서 전달할 수 있습니다.
def func7(*args):
return args
print(func7())
print(func7(10))
print(func7(10, 30, 50))
def func8(a, b, c):
return a + b + c
numbers = [1, 2, 3]
print(func8(*numbers))
키워드 매개변수는 일반적으로 기본값이 설정된 매개변수와 함께 사용됩니다. 함수의 매개변수에 기본값을 설정하면, 함수를 호출할 때 해당 매개변수를 생략할 수 있습니다.
def func9(id, name, age):
print(f'아이디: {id}')
print(f'이름: {name}')
print(f'나이: {age}')
func9('apple', '김사과', 20)
func9(age=30, id='orange', name='오렌지')
# 매개변수명과 딕셔너리의 키가 같아야함
# 딕셔너리의 키는 반드시 문자열 형태
dic1 = {'age':25, 'id':'banana', 'name':'반하나'}
func9(**dic1)
# *의 데이터를 보낼 경우 키가 저장
func9(*dic1)
def func10(num1=0, num2=0):
return num1+num2, num1-num2, num1*num2, num1/num2
result = func10(10, 3)
print(result)
result1, result2, result3, result4 = func10(10, 3)
print(f'덧셈:{result1}')
print(f'뺄셈:{result2}')
print(f'곱셈:{result3}')
print(f'나눗셈:{result4}')
_, _, result3, _ = func10(10, 3)
print(f'곱셈: {result3}')
li1 = [10, 20, 30, 40, 50]
for _, v in enumerate(li1):
print(f'값: {v}')
함수도 파이썬 객체이므로 참조 카운팅과 가비지 컬렉션의 원칙에 따라 동작합니다. 함수를 참조하는 변수나 요소가 없게 되면 해당 함수는 가비지 컬렉터에 의해 메모리에서 제거될 수 있습니다. del 명령어를 사용하여 함수에 대한 참조를 명시적으로 제거할 수 있습니다. 하지만 이것이 함수가 즉시 메모리에서 제거된다는 것을 보장하지는 않습니다.
def func1():
print('처음으로 만드는 함수')
del func1
# 이후 func1()을 호출하려고 하면 오류가 발생합니다.
None은 파이썬에서 특별한 값으로, 아무런 값이 없음을 표현하는 데 사용됩니다. 다른 언어에서의 null 또는 nil과 유사한 개념입니다. None은 파이썬의 내장 상수이며, 그 자체로 데이터 타입이 NoneType입니다. 모든 None은 동일하므로, 두 개의 None 값을 비교할 때 항상 True를 반환합니다.
1. 변수를 초기화할 때 아무런 값이 할당되지 않았음을 나타내기 위해 None을 사용할 수 있습니다.
variable = None
2. 함수에서 특정 조건에서 아무런 값도 반환하지 않아야 할 때 None을 사용합니다. 사실, 함수에서 return 문이 생략되거나 없으면 기본적으로 None을 반환합니다.
def my_function(x):
if x > 10:
return x
# x가 10 이하일 때는 아무런 값도 반환하지 않습니다. 실제로는 None이 반환됩니다.
3. 함수의 매개변수에 기본값으로 None을 할당하여 선택적으로 인자를 전달받을 수 있게 만들 수 있습니다. None을 검사할 때는 == 대신 is 연산자를 사용하는 것이 좋습니다. is는 객체의 동일성을 검사하는 반면, ==는 객체의 동등성을 검사하기 때문입니다.
def hello(message=None):
if message is None:
print("Hello!")
else:
print(message)
li1 = [1, 2, 3, 4, 5]
li2 = [1, 2, 3, 4, 5]
# 객체 비교
result1 = li1 is li2
# 값 비교
result2 = li1 == li2
print(result1)
print(result2)
4. 값의 존재 여부 확인: None을 사용하여 값의 존재 여부를 확인할 수 있습니다.
# 값의 존재 여부 확인
def get_data_from_database():
pass
data = get_data_from_database()
print(data)
if data is None:
print('데이터를 수신하지 못함!')
else:
print('데이터를 수신받음!')