사용자 정의 함수

현서·2025년 1월 2일

파이썬

목록 보기
15/27
post-thumbnail

1. 사용자 정의 함수

  • 사용자가 특정 작업을 수행하기 위해 직접 작성한 함수
  • 우리의 요구사항에 맞게 동작하는 함수를 직접 만들어야 할 때가 있다. 이때 사용자 정의 함수를 작성하게 된다.
def 함수명(매개변수1, 매개변수2, ...):
    # 함수 내용
    return 결과값

2. 매개변수와 반환 값이 없는 함수

def func1():
    print('처음으로 만드는 함수!')

func1()
func1()
처음으로 만드는 함수!
처음으로 만드는 함수!
for i in range(5):
    func1()
처음으로 만드는 함수!
처음으로 만드는 함수!
처음으로 만드는 함수!
처음으로 만드는 함수!
처음으로 만드는 함수!

3. 매개변수가 있고 반환 값이 없는 함수

def func2(num):
    print(f'입력받은 숫자 : {num}') # 지역변수 : 스택에 저장. 필요없으면 바로 폐기

func2(10)
func2(4)
입력받은 숫자 : 10
입력받은 숫자 : 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)
1부터 10까지의 합: 55
1부터 100까지의 합: 5050

4. 반환 값이 있는 함수

def func4():
  print('안녕하세요 Python!')

func4() # 함수 실행
temp = func4() # 함수 실행 후 반환값을 temp에 저장
print(temp)

temp = func4 # 함수의 주소를 temp에 저장
print(temp)
temp()
안녕하세요 Python!
안녕하세요 Python!
None
<function func4 at 0x7a4f12b73be0>
안녕하세요 Python!
def func5():
  return '🎁'

presents = func5()
print(f'presents에 저장된 값: {presents}')
presents에 저장된 값: 🎁
def func6(num1, num2):
  sum = num1 + num2
  return sum

print(func6(10, 5))
temp = func6(4, 3)
print(temp)

# print(func5(10)) # TypeError: func5() missing 1 required positional argument: 'num2'
# print(sum)
# print(num1)
# print(num2)
15
7

5. None의 특징

  • None은 파이썬에서 특별한 값으로, 아무런 값이 없음을 표현하는 데 사용.
  • 다른 언어에서의 null 또는 nil과 유사한 개념.
  • None은 파이썬의 내장 상수이며, 그 자체로 데이터 타입이 NoneType.
  • 모든 None은 동일하므로, 두 개의 None 값을 비교할 때 항상 True를 반환.

1. 변수를 초기화할 때 아무런 값이 할당되지 않았음을 나타내기 위해 None 사용.

variable = None

2. 값의 존재 여부 확인: None을 사용하여 값의 존재 여부를 확인할 수 있다.

# 값의 존재 여부 확인
def get_data_from_database():
    pass

data = get_data_from_database()
print(data)
if data is None:
    print('데이터를 수신하지 못함!')
else:
    print('데이터를 수신받음!')
None
데이터를 수신하지 못함!
def func():
  pass # # pass 라고 써놓으면 나중에 구현해도 됨.

3. 함수에서 특정 조건에서 아무런 값도 반환하지 않아야 할 때 None을 사용한다. 함수에서 return 문이 생략되거나 없으면 기본적으로 None을 반환한다.

def func(x):
  if x > 0:
    return x
  # x가 10 이하일 때는 아무런 값도 반환하지 않는다. 실제로는 None이 반환된다.  
print(func(10))
10
print(func(-1))
None

4. 함수의 매개변수에 기본값으로 None을 할당하여 선택적으로 인자를 전달받을 수 있게 만들 수 있다. None을 검사할 때는 == 대신 is 연산자를 사용하는 것이 좋다. is는 객체의 동일성을 검사하는 반면, ==는 객체의 동등성을 검사한다.

def hello(message=None):
    if message is None: # if message == none: 이렇게 하지 않음.
        print("Hello!")
    else:
        print(message)
hello('hi')
hi
hello()
Hello!
li1 = [1, 2, 3, 4, 5]
li2 = [1, 2, 3, 4, 5]

# 객체 비교
result1 = li1 is li2
# 값 비교
result2 = li1 == li2

print(result1)
print(result2)
False
True

6. 기본값이 설정된 매개변수

def func6(num1=1, num2=2):
  sum = num1 + num2
  return sum
print(func6())
3
print(func6(10))
12

num1에만 10이 들어가고, num2에는 그대로 2가 들어있어서 둘이 더하여 12가 출력된 것으로 보임.

print(func6(10,3))
13

num1=10, num2=3 들어가서 둘이 더하여 13이 출력됨.

# print(func6(, 3))
# print(func6(None, 3))
print(func6(num2=3)) # 뒤의 변수에 값을 넣고 싶은 경우
4

7. 가변 매개변수

함수를 호출할 때 *를 사용하면 시퀀스(리스트, 튜플 등)의 요소를 개별적인 위치 인자로 풀어서 전달할 수 있다.

def func7(*args):
  return args

print(func7())
print(func7(10)) # 튜플로 묶을 때는 (10, ) 이렇게 콤마가 꼭 붙음.
print(func7(10, 30, 50))
()
(10,)
(10, 30, 50)
def func8(a, b, c):
  return a + b + c
numbers = [1, 2, 3]
func8(*numbers)
6

8. 키워드 매개변수

  • 키워드 매개변수는 일반적으로 기본값이 설정된 매개변수와 함께 사용된다.
  • 함수의 매개변수에 기본값을 설정하면, 함수를 호출할 때 해당 매개변수를 생략할 수 있다.
def func9(id, name, age):
  print(f'아이디: {id}')
  print(f'이름: {name}')
  print(f'나이: {age}')
func9('apple', '김사과', 20)
아이디: apple
이름: 김사과
나이: 20
func9(age=30, id='orange', name='오렌지')
아이디: orange
이름: 오렌지
나이: 30
# 매개변수명과 딕셔너리의 키가 같아야함
# 딕셔너리의 키는 반드시 문자열 형태
dic1 = {'age':25, 'id':'banana', 'name':'반하나'}
func9(**dic1)
아이디: banana
이름: 반하나
나이: 25
# *의 데이터를 보낼 경우 키가 저장
func9(*dic1)
아이디: age
이름: id
나이: name

9. 여러개의 반환 값

def func10(num1=0, num2=0):
  return num1+num2, num1-num2, num1*num2, num1/num2
result = func10(10, 3)
print(result)
(13, 7, 30, 3.3333333333333335)
result1, result2, result3, result4 = func10(10, 3)
print(f'덧셈:{result1}')
print(f'뺄셈:{result2}')
print(f'곱셈:{result3}')
print(f'나눗셈:{result4}')
덧셈:13
뺄셈:7
곱셈:30
나눗셈:3.3333333333333335
_, _, result3, _ = func10(10, 3)
print(f'곱셈:{result3}')
곱셈:30
li1 = [10, 20, 30, 40, 50]

for _, v in enumerate(li1):
    print(f'값: {v}')
값: 10
값: 20
값: 30
값: 40
값: 50

10. 함수 삭제하기

함수도 파이썬 객체이므로 참조 카운팅과 가비지 컬렉션의 원칙에 따라 동작한다.
함수를 참조하는 변수나 요소가 없게 되면 해당 함수는 가비지 컬렉터에 의해 메모리에서 제거될 수 있다. del 명령어를 사용하여 함수에 대한 참조를 명시적으로 제거할 수 있다. 하지만 이것이 함수가 즉시 메모리에서 제거된다는 것을 보장하지는 않는다.

def func11():
  print('안녕하세요 파이썬')

func_var = func11
func_var()
안녕하세요 파이썬
def my_function():
    print("Hello, World!")

del my_function
# 이후 my_function()을 호출하려고 하면 오류 발생.
profile
The light shines in the darkness.

0개의 댓글