[파이썬] 함수
by mini_min[파이썬] 함수
✔️ 함수
: 파이썬에서 함수는 복잡한 문제를 작고 간단한 문제로 나누어 디버깅이나 유지 보수가 용이하다.
논리적 구조가 명확해진다. 함수는 function 이라는 데이터 타입의 객체이다.
인수는 함수를 호출할 때 함수에 전달하는 입력값이다. (주는 애)
매개변수는 함수에 입력으로 전달된 값을 받는 변수이다. (받는 애)
형식 : def 키워드를 사용해 정의한다.
입력 파라미터나 반환 값은 없을 수도 있다.
✔️ 리턴 값
: 함수로부터 호출자로 리턴 하기 위해서는 return 문을 사용한다.
리턴 값은 하나 이상일 수 있으며 필요한 수 만큼 return 키워드 다음에 콤마로 구분해 적는다.
return a, b, c 는 (a,b,c) 값을 포함하는 tuple 하나를 리턴하는 것이다.
✔️ 매개변수
: 입력 파라미터는 Pass By Assignment 에 의해 전달된다.
전달되는 입력 파라미터는 Mutable 이거나 Immutable 에 따라 달라진다.
mutable 은 함수 내에서 객체의 내용이 변경될 수 있으나, immutable 은 변경 불가하다.
# 매개변수가 없는 경우
def sum():
t = 0
for num in range(1, 101):
t += num
print("합 : " , t)
#함수 호출
sum()
# 매개변수가 있는 경우
#함수 정의
def gugu(dan):
for i in range(1, 10):
print(f"{dan} * {i} = {dan * i}")
#함수 호출 ( 5단 출력됨 )
gugu(5)
# 매개변수가 있는 경우
#함수 정의
def sum(a):
t = 0
for i in a:
t += i
print("결과 : " , t)
#함수 호출
sum([1,2,3,4,5]) # list
sum((2,4,6,8,10)) # tuple
✔️ 홀수의 합 등등
# 홀수의 합
def sum(n):
if n < 0: return
result = 0
for i in range(1, n+1, 2):
result += i
return result
print(sum(100))
#
def sum(n):
tot = 0
count = 0
for i in n:
count += 1
tot += i
return count, tot # tuple로 반환
a ,b = sum([1,3,5,7,9])
x = sum([1,3,5,7,9])
print(a, b) # 5 25
print(x) # (5, 25)
a = sum([2,4,6,8,10])
print(a[0], a[1]) # 5 30
print(type(a)) # <class 'tuple'>
✔️ 매개변수 전달 방식
함수 안에서 매개변수를 바꿔보려고 한다.
첫번째 : int 는 immutable 이라 값 변경이 n=10 으로 안된다.
두번째 : list 는 mutable 이라 3번째 값이 변경된다.
세번째 : tuple 은 immutable 이라 값 변경이 안된다.
# 매개변수 전달 방식
# mutable : list, dict, bytearry, set
# immutable : int, float, str, tuple, bytes, complex, bool, frozenset
# n 바꾸기
def test(n):
n = 10
def test2(n):
n[2] = 10
n = 5 # int, immutable
test(n)
print(n) # 5, 값 변경 안됨
n = [1,2,3,4,5] # list, mutable 이라 값 바뀜
test2(n)
print(n) #[1,2,10,4,5] # 값 바뀜
# n = (1,2,3,4,5) # tuple, immutable
# test2(n)
# print(n) #(1,2,3,4,5) : 값 변경 x 오류나옴
✔️ 위치 인자
: 위치 인자는 가장 기본적인 함수의 파라미터 형태다. 위치에 따라 인자를 함수 내부식에 대입한다. (순서 다르면 안됨)
# 위치 인자
def info(name, gender, age):
print(f"""
이름 : {name}
성별 : {gender}
나이 " {age}
""")
info("홍길동", "남", 20)
info("남", "홍길동", 20)
키워드 인자랑 같이 사용할 수 있다.
다만, 위치 + 키워드 인자를 같이 쓰면 위치 인자가 먼저 와야한다.
# 키워드 인자
# 위치 인자랑 키워드 인자 같이 쓸 수 있음
def info(name, gender, age):
print(f"""
이름 : {name}
성별 : {gender}
나이 " {age}
""")
info(gender="남", name="홍길동", age=20)
# 위치 + 키워드 인자 같이 쓰는 경우 위치 인자가 먼저 와야한다.
def info(name, gender, age):
print(f"""
이름 : {name}
성별 : {gender}
나이 " {age}
""")
info("홍길동", age=20, gender="남")
✔️ 가변 길이 파라미터
: 함수의 입력 파라미터의 개수를 미리 알 수 없거나, 0부터 N개의 파라미터를 전달할 경우, 가변 길이 파라미터를 사용할 수 있다.
파라미터명에 "*" 를 붙여 가변 길이임을 표시한다.
가변 길이 파라미터는 튜플형으로 전달된다.
일반 매개변수와 가변 인자 함수를 같이 사용하면 가변 인자는 오른쪽에 위치한다.
# 가변 길이 파라미터
def sum(*args):
result = 0
for num in args:
result += num
return result
s = sum(1,2,3,4,5)
print(s)
# 가변 길이 파라미터
def calc(op, *args):
result = None
if op == "+":
result = 0
for i in args:
result += i
elif op == "*":
result = 1
for i in args:
result *= i
return result
s = calc('+', 1,2,3,4,5)
print(s)
s = calc('*', 1,2,3,4,5)
print(s)
✔️ 디폴트 파라미터
: 기본값이 정의된 인자를 말한다.
함수를 호출 할 때 인자를 명시하지 않아도 기본값으로 인자가 전달된다.
함수를 정의할 때 기본값을 함께 정의한다.
일반 매개변수와 함께 사용할 때는 디폴트 매개변수는 일반 매개변수 다음에 정의해야한다.
# 디폴트 step=1
def sum(start, end, step=1):
t = 0
for n in range(start, end+1, step):
t += n
return t
s = sum(1, 10)
print("합계:" ,s)
s = sum(1, 10, 2)
print("홀수 합계:" ,s)
✔️ 가변 키워드 인수
: 매개변수 이름 앞에 "**"를 붙이면 아버트레리 키워드 매개변수가 된다.
키워드 인수는 딕셔너리로 전달된다.
가변 키워드 인자가 가장 뒤에 나와야한다.
# 가변 키워드 파라미터 (arbitrary keyword)
# ** 가 2개면 딕셔너리로 봄
def fun(category, **kargs):
print("카테고리: ", category)
print(type(kargs)) # <class 'dict'>
print(kargs) #딕셔너리로 처리
category = "숫자"
fun(category, a=1, b=2, c=3)
category = "과일"
fun(category, a="사과", b="딸기")
category = "과일"
a = {'a':'사과', 'b':'딸기'}
fun(category, **a)
✔️ 특수 매개변수
: 위치 매개변수는 / 앞에, / 다음의 매개변수는 위치-키워드 매개변수나 키워드 전용 매개변수가 온다.
: 키워드 전용 매개변수는 키워드 전용 매개변수 바로 앞에 * 가 위치해야한다.
: / 나 * 가 없으면 매개변수는 위치나 키워드 인자로 함수에 전달할 수 있다.
: / 와 * 는 선택적으로 사용 가능하다.
# 특수 매개변수
# 표준 (위치, 키워드 가능)
def fun(arg):
print(arg)
fun(3) # 위치로 부른 경우 - 가능
fun(arg=5) # 키워드
# 위치 전용 (키워드로 못넘겨)
def fun2(arg, /):
print(arg)
fun2(1) # 위치로 부른 경우 - 가능
# fun2(arg=2) # 에러
# 키워드 전용 (키워드로만 지원)
def fun3(*, arg):
print(arg)
# fun3(3) # 에러
fun3(arg=7) # 키워드
# 혼용
def fun4(pos, /, std, *, kwd):
print(pos, std, kwd)
fun4(1,2,kwd=3)
fun4(10,std=20,kwd=30)
def fun5(pos, /, *, kwd):
print(pos, kwd)
fun5(100, kwd=200)
# 특수 매개변수
# 위치인자 a, a를 가변키워드로 가진 경우
def sub(name, **kwds):
print(name, kwds)
return "name" in kwds
# s = sub(1, **{"name":"김자바"})
# 에러. 위치인자 name과 name을 가지고 있는 kwds와 충돌
s = sub(1, **{"subject":"자바"})
print(s, end='\n')
def sub(name, /, **kwds):
print(name, kwds)
return "name" in kwds
s = sub(1, **{"name":"자바"})
print(s)
✔️ 전역 변수 , 지역 변수
: 전역 변수는 함수 밖에서 정의된 변수를 말한다.
함수 밖에서 정의되어 함수 내에서도 별다른 매개변수 입력 없이 접근 가능하며
global 명령어로 해당 변수를 global 변수로 선언한다.
: 지역 변수는 함수 안에서 변수를 선언하고 사용할 경우
함수 밖에 있는 같은 이름의 변수들과 함수 안에 있는 변수들과 서로 연관이 없다.
이런 변수를 지역 local 변수라고 한다.
# 전역 변수
def fun():
global a # a는 전역변수
# a += 10 # 에러, 변경이 불가함, print는 된다.
print("함수:",a)
a = 10
fun()
print(a) # 20
# 지역 변수 : 바깥 변수를 사용할 순 있어도 변경은 불가하다. (y예시)
# nonlocal 쓰면 변경 가능 @
def fun():
x = 10
y = 100
z = 200
def sub():
x = 20
# y += 10 #에러
nonlocal z
z += 10
print("sub()", x) # 20 로컬변수
print("sub()", y, z) # 상위 함수 변수
sub()
print("fun()", x, y,z ) # 10 100
fun()
✔️ 람다
: 보통 짧고 간결한 함수를 한 줄로 나타내기 위해 사용한다.
작고 이름 없는 함수를 만든다.
# lamda
add = lambda a, b: a+b
result = add(3,5)
print(result)
# function annotation
def fun(name:str, age:int) -> str:
state = "성인" if age >= 19 else "미성년자"
return name +"님은 " + state +"입니다."
s = fun("김자바", 30)
print(s)
s = fun("김자바", 20.0)
print(s)
# 재귀호출
def sum(num):
if num>=1 :
return num + sum(num-1)
return num
s = sum(10)
print(s)
✔️ 기타 파이썬에서 제공하는 내장함수
#내장함수
#반올림
a = round(13.75)
b = round(13.75, 1)
print(a, b) # 14 13.8
# 승
print(pow(2,10))
print(2 ** 10)
#절대값
print(abs(-7))
#몫과 나머지
a,b = divmod(100,8)
print(a,b) #앞이 몫, 뒤가 나머지
#2진수 문자열로
print(bin(27))
#16진수 문자열로
print(hex(27))
a = [3,5,1,10,7,9]
print(max(a), min(a), sum(a))
print(chr(65), ord('A'), ord("대")) # 코드의 문자, 문자의 코드
'Python' 카테고리의 다른 글
[파이썬] 클래스 2 (0) | 2022.12.25 |
---|---|
[파이썬] 클래스 (0) | 2022.12.18 |
[파이썬] 별찍기, selection sort, bubble sort (0) | 2022.12.18 |
[파이썬] 연산자 문법, for, if 제어문 (0) | 2022.12.14 |
[파이썬] 기본 문법 (0) | 2022.12.12 |
블로그의 정보
개발자 미니민의 개발로그
mini_min