1. 사용자 정의 함수
사용자 정의 함수란 사용자가 특정 작업을 수행하기 위해 직접 작성한 함수를 의미합니다. 파이썬에는 많은 내장 함수들이 있지만, 때로는 우리의 요구사항에 맞게 동작하는 함수를 직접 만들어야 할 때가 있습니다. 이때 사용자 정의 함수를 작성하게 됩니다. 기본적인 구조는 아래와 같습니다.
def 함수명(매개변수1, 매개변수2, ...):
# 함수 내용
return 결과값
2. 매개변수와 반환 값이 없는 함수
def func1(): #함수만 불러주면 알아서 호출
print('처음으로 만드는 함수')
func1() #메모리를 차지하고 있고 호출하면 불러올 수 있다.
처음으로 만드는 함수
for i in range(5):
func1()
처음으로 만드는 함수
처음으로 만드는 함수
처음으로 만드는 함수
처음으로 만드는 함수
처음으로 만드는 함수
3. 매개변수가 있고 반환 값이 없는 함수
def func2(num):
print(f'입력받은 숫자 {num}')
func2(10)
func2(5)
입력받은 숫자 10
입력받은 숫자 5
def func3(start, end):
sum = 0
for i in range(start, end + 1):
sum = sum + i
print(f'{start}부터 {end}까지의 합 : {sum}')
func3(1, 100)
1부터 100까지의 합 : 5050
4. 반환 값이 있는 함수
def func4():
print('안녕') # return이 없기때문에 아무 값도 줄 수없어 변수에 아무것도 담기지 않음.
>> 출력 값 없음
a = func4()
print(f'a에 저장된 값: {a}')
안녕
a에 저장된 값: None
def func5():
'★'
a= func5()
print(a)
None
def func5():
return '★' # return을 이용해 변수에 값을 담음 func5()는 출력에만 사용하고 저장은 되지않음
star = func5()
print(f'star에 저장된 값 : {star}')
star에 저장된 값 : ★
def func6(num1, num2):
sum = num1 + num2
return sum #sum 값을 result에 담음
result = func6(10, 5)
print(result)
15
5. ※ None의 특징
- None은 파이썬에서 특별한 값으로, 아무런 값이 없음을 표현하는 데 사용됩니다. 다른 언어에서의 null 또는 nil과 유사한 개념입니다.
- None은 파이썬의 내장 상수이며, 그 자체로 데이터 타입이 NoneType입니다. 모든 None은 동일하므로, 두 개의 None 값을 비교할 때 항상 True를 반환합니다.
1. 기본 초기값 설정: 변수를 초기화할 때 아무런 값이 할당되지 않았음을 나타내기 위해 None을 사용할 수 있습니다.
variable = None
2. 함수의 반환 값으로 사용: 함수에서 특정 조건에서 아무런 값도 반환하지 않아야 할 때 None을 사용합니다. 사실, 함수에서 return 문이 생략되거나 없으면 기본적으로 None을 반환합니다.
def my_function(x): # x값에 값이 들어가게 되면
if x > 10 : # 10과 비교해서
return x # 조건에 맞으면 반환값이 나옴
# x가 10 이하일 때는 아무런 값도 반환하지 않습니다.
#실제로는 None이 반환됩니다.
my_function(11)
my_function(2) # 리턴이 없어 반환값이 안나옴
11
# 처음 코드 수정
def my_function(x):
if x > 10 :
return x
else:
return None # 조건이 안맞을 경우의 리턴값도 만들어야 반환값이 나옴
a = my_function(15)
print(a)
a = my_function(1)
print(a)
15
None
3. 선택적 매개변수의 기본값: 함수의 매개변수에 기본값으로 None을 할당하여 선택적으로 인자를 전달받을 수 있게 만들 수 있습니다.
# 선택적 매개변수의 기본값
def hello(message = None):
if message is None:
print('Hello') # None이면 Hello 출력
else:
print(message)
hello('안녕하세요')
hello()
안녕하세요
Hello
4. 값의 존재 여부 확인: None을 사용하여 값의 존재 여부를 확인할 수 있습니다.
None을 검사할 때는 == 대신 is 연산자를 사용하는 것이 좋습니다.
is는 객체의 동일성을 검사하는 반면, ==는 객체의 동등성을 검사하기 때문입니다.
# 값의 존재 여부 확인: None을 사용하여 값의 존재 여부를 확인할 수 있습니다.
def get_data_from_database():
pass # pass를 사용하면 나중에 이것을 채우던가 넘어가는 용도
data = get_data_from_database()
print(data)
if data is None :
print('데이터 수신 못함')
else :
print('데이터 수신 받음')
None
데이터 수신 못함
li1 = [1, 2, 3, 4, 5]
li2 = [1, 2, 3, 4, 5]
li3 = li1
# 서로 다른 개체(객체 비교). is는 객체의 동일성을 검사
result1 = li1 is li2
print(result1) # False
result2 = li1 is li3 # True
print(result2)
# 값이 같은 객체(값 비교). ==는 객체의 동등성을 검사
result3 = li1 == li2
print(result3) # True
6. 기본값이 설정된 매개변수
def func6(num1, num2):
sum = num1 + num2
return sum
print(func6(10, 3))
13
def func6(num1=1, num2=1):
sum = num1 + num2
return sum
print(func6())
#출력: 2
print(func6(10)) # num1에 10이 들어가고 , num2 = 1이 그대로 출력됨
#출력: 11
print(func6(10, 3)) # num1에 10이 들어가고, num2에 3이 들어감
#출력: 13
print(func6(num2=10)) # num1을 비우고 num2에만 값을 넣고 싶을때
#출력: 11
7. 가변 매개변수
7-1 . 패킹과 언패킹
- 언패킹(Unpacking) : 값을 풀어서 적는것
def get_Total(number1, number2, number3):
return number1 + number2 + number3
- 패킹(Packing) : 값을 묶어서 적는것
1. * 을 사용하면 get_total이 튜플형태로 한번에 들어간다. => 튜플 형태로 저장
2. 자동으로 여러개의 값을 받기 때문에 리스트로 받아짐
3. 여러개의 값을 하나로 묶어서 전달하게 되면, packing으로 인해 첫번째 방에 통채로 들어가게 된다.
4. 즉, 결과는 다음과 같다 ([1, 2, 3, 4, 5],) 튜플 안 첫번째 방
def get_total(*numbers): # *이 있다면 패킹 : 여러개 선언해야 하는것을 한번에 묶어서 받음
# 외부에서 전달받은 값들이 numbers(튜플)에 튜플형태로 저장된다.
print(type(numbers))
total = 0
for number in numbers:
total += number
return total
# *을 사용하면 get_total이 튜플형태로 한번에 들어간다
numbers = [1, 2, 3, 4, 5]
total = get_total(numbers)
print(total) # TypeError: unsupported operand type(s) for +=: 'int' and 'list'
- 따라서 내부의 요소는 각각 전달하고 싶다면, 앞에 *을 작성해야한다.
- 데이터가 묶어서 왔을때 *을 사용
numbers = [1, 2, 3, 4, 5]
total = get_total(*numbers)# 데이터가 묶어서 왔을때 *을 사용
print(total)
# # 튜플로 한번에 값을 받음
- 함수를 호출할 때 *를 사용하면 시퀀스(리스트, 튜플 등)의 요소를 개별적인 위치 인자로 풀어서 전달할 수 있습니다.
# 함수 내부에서는 매개변수를 튜플로 처리
def func7(*args): # *를 써서 데이터를 입력하면 튜플로 입력된다.
result = 0
# print(args)
for i in args:
result += i
return result
print(func7())
print(func7(10, 30, 20, 70))
print(func7(10))
def add(a, b, c):
return a + b + c
numbers = [1, 2, 3]
print(add(*numbers)) # 출력: 6
- 반드시 받아야하는 매개변수는 패킹앞에 작성하기
# 국어 영어 수학 점수를 전달받은 뒤 총점을 출력하는 함수
packing으로 제작하기
def get_total(name, *scores): # 반드시 받아야하는 매개변수는 packing앞에 작성한다
print(name + '님')
total = 0
for score in scores:
total += score
return total
scores= [100,40,50]
print(get_total('류니', 100, 40, 50))
kwargs (keyword arguments)
# # keyword arguments
#
# def introduce(**intro): #딕셔너리
# print(type(intro))
# print(f'name : {intro["name"]}')
#
#
# introduce(name="이정륜") # 딕셔너리로 보내려면 위에서 **kwargs
# introduce(**{'name':'이정륜'}) # 딕셔너리를 통채로 보내려면 딕셔너리 앞에 **
kwargs 예제 문제1)
국어 영어 수학 점수의 평균 구하기
# kwargs로 선언
def score_av(**kwargs):
all = sum(kwargs.values())
av = all/3
return av
print(score_av(**{'kor':80 , 'eng':90 , 'math': 70}))
def score_av(**kwargs):
kor = kwargs['kor']
eng = kwargs['eng']
math = kwargs['math']
return (kor+eng+math)/3
print(score_av(kor=80,eng=90,math=70))
kwargs 예제 문제 2)
국어 영어 수학 점수의 평균 구하기
# 사용자가 원하는 자리수(round)에서 반올림해준다.
# 자리수를 받지 않았다면, 기본값을 리턴한다.
# 국어 영어 수학 점수의 평균 구하기
# kwargs로 선언
def average(**kwarg):
if "round" in kwarg:
kor, eng, math = kwarg.get('kor'), kwarg.get('eng'), kwarg.get('math')
total = kor + eng + math
ave = total/3
if "round" in kwarg:
return round(ave, kwarg['round'])
return ave
print(average(kor=100, eng=30, math=22, round= 2))
8. 키워드 매개변수
def func8(id, name, age):
print(f'아이디: {id}')
print(f'이름: {name}')
print(f'나이: {age}')
func8('Fubao', '푸바오', 3)
func8(id = 'apple', age=20, name='푸바오') # 값을 입력할때 변수 이름을 써주면 함수 호출순서가 달라도 됨
아이디 : Fubao
이름 : 푸바오
나이 : 3
아이디 : apple
이름 : 푸바오
나이 : 20
dic1 = {'id' : 'apple', 'name' : '푸바오', 'age' : 3}
func8(**dic1) # ** 값이 입력 // key값이 func8 함수의 데이터 입력값과 동일해야 값을 출력
func8(*dic1) # *를 key 입력
아이디 : apple
이름 : 푸바오
나이 : 3
아이디 : id
이름 : name
나이 : age
def func9(**args):
#print(args)
for i in args: # i에 키가 저장
if i == 'id': # id값 뽑기
userid = args[i]
return userid
user = func9(id = 'apple', name = '푸바오', age = 20)
user
apple
9.여러개의 반환값
def func10(num1, num2):
return num1 + num2
result1 = func10(10,3)
print(result1)
13
def func10(num1, num2):
return num1 + num2, num1 - num2, num1 * num2, num1 / num2
result1, result2, result3, result4 = func10(10,3)
print(f'덧셈: {result1}, 뺄셈: {result2}, 곱셈: {result3}, 나눗셈: {result4}'
덧셈: 13, 뺄셈: 7, 곱셈: 30, 나눗셈: 3.3333333333333335
_, _, result3, _ = func10(10,3) # 곱셈의 결과만 필요할때 '_' 이용하면 원하는 값만 출력
print(result3)
30
'컴퓨터 비전 > 파이썬 기초' 카테고리의 다른 글
14. 콜백함수와 람다함수 (1) | 2023.12.11 |
---|---|
13. 변수의 범위 (1) | 2023.12.11 |
11. 컬렉션과 반복문 (1) | 2023.12.10 |
10. 제어문 - 반복문 (1) | 2023.12.10 |
9. 제어문 - 조건문 (2) | 2023.12.08 |