[Python] 함수(Function)

is Yoon·2023년 8월 17일
0

Python

목록 보기
12/17

🔗 함수(Function)
프로그래밍에서 함수는 독립적으로 설계된 프로그램 코드의 집합이다. 함수를 사용하면반복적인 코드의 양을 줄여 유지보수성을 높여준다.
함수는 반복 사용되는 코드를 용도에 맞게 함수 바디에 모아두고 재사용 가능하도록 호출 가능하게 만든 것이다.


🔗 매개변수(Parameter)
함수를 정의할 때 사용하는 이름


🔗 실행인자(Arguments)
함수를 실행할 때 넘기는 변수, 값


함수 정의

기본 구조

  1. 메인 코드에서 선언한 인수(arguments)
  2. 함수 정의부매개변수(인자, parameter)에 넣어 함수 실행
  3. 실행된 함수에 따른 return값을 반환
inputblack boxoutput
구조메인 코드
arg1, arg2
함수 정의부
정의된 함수 호출 후 실행
메인 코드
return
수식x = func_n(arg1, arg2)
print(x)
def func_n(param1, param2) :
result = param1 + param2
return result
return : result -> x
예제arg1 = 3
arg2 = 5
param1 <- arg1 : 3
param2 <- arg2 : 5
8
함수에 의해 3+5 계산
return 받은 x값 8출력

1) 함수 정의부

def 함수명(parameter1, 인자2, ..) :
	함수 코드
	return 반환값

2) 메인 코드

x = 함수명(arguments1, 인수2, ..)
print("결과값 : ", x)

함수는 전달할 인자와 반환 값의 유무에 따라 다양한 구조로 만들 수 있다.

# 인자, 반환값 모두 없는 함수

def my_func() : 
	print("함수를 정의했다.")
    
my_func()    # 함수 입력 -> 함수 실행
------------------------------------
함수를 정의했다.
# 인자는 있으나 반환값은 없는 함수

def my_func(number) :
	print("number : ", number)

my_func(3)
--------------------------------
number : 3
# 인자, 반환값 모두 있는 함수

def my_func(number) :
	result = number + number
    return result

my_func(3)
--------------------------------
6

옵셔널 파라미터 (optional parameter)

파라미터에 '기본값(default value)'을 설정할 수 있다. 기본값을 설정해 두면 함수를 호출할 때 파라미터에 값을 꼭 넘겨주지 않아도 된다. 옵셔널 파라미터는 꼭 마지막에 입력해야 한다.

def my_func(num, num2=3) :
	result = num + num2
my_func(3)
----------------------------
6



변수의 유효 범위

기본적으로 함수 안에서 정의한 변수는 함수 안에서만 사용할 수 있다. 즉, 함수 안에서 생성한 변수는 함수를 호출해 실행되는 동안만 사용할 수 있고, 함수 실행이 끝나면 더는 사용할 수 없다.

  • 지역 변수 local variable - 함수 안에서 정의하여 함수 영역 안에서만 동작하는 변수
  • 전역 변수 global variable - 함수 밖에서 정의하여 어디서나 사용할 수 있는 변수

함수를 어디에서 정의했느냐에 따라 코드 내에서 영향을 미치는 유효 범위가 달라진다.

  • 지역 영역 local scope : 지역 변수를 저장하는 이름 공간
  • 전역 영역 global scope : 전역 변수를 저장하는 이름 공간
  • 내장 영역 built-in scope : 파이썬 자체에서 정의한 이름 공간

함수에서 어떤 변수를 호출하면 지역 영역, 전역 영역, 내장 영역 순서대로 변수가 있는지 확인하는 것을 스코핑 룰 (Scoping rule) 혹은 LGB 룰 (Local/Global/Built-in rule)이라고 한다.

함수의 인자(Parameter)

  • 함수인자 = 매개변수
  • 함수가 받을 수 있는 변수
def 함수이름(위치인자, 위치인자2, *가변위치, 키워드인자, 키워드인자, **가변키워드)

1) 위치-키워드 (positional or keyword)

  • 위치 인수 또는 키워드 인수로 전달될 수 있는 인자 (기본 형태)

2) 위치 전용 (positional-onlu)

  • / 기준으로 좌측에 위치한 인자
def posionly(posionly, /) :

3) 키워드 전용 (keyword-only)

  • * 기준으로 우측에 위치한 인자
def keyonly(*, keyonly="default") :
# default 값이 있는 parameter에 대해서는 argument를 생략해도 정상 작동한다.

4) 가변 위치 (var positional)

  • *변수명
  • 위치 매개변수 외에 추가적인 위치 매개변수를 개수에 상관없이 받을 수 있다.
def var_positional(*args) :

5) 가변 키워드 (var keyword)

  • **변수명
  • 키워드 매개변수 외에 추가적인 키워드 매개변수를 개수에 상관없이 받을 수 있다.
def var_keyword(**kargs) :



return

여러 개의 값을 리턴하는 방법

def a_and_b(x):
    a = x + 2
    b = x + 3
    return a, b

# 리턴값 변수에 저장
apple, banana = a_and_b(2)




람다(Lambda) 함수

  • (lambda 인자 : 반환값으로 사용할 식) (인자)
  • lambda_function = lambda 인자 : 인자 활용 수행 코드
    lambda_function(인자)
  • 호출될 때 값이 구해지는 하나의 표현식
  • 이름이 없는 인라인 함수
  • 익명 함수 (ananymous function)

콜백 함수가 하나일 때 람다식을 사용하는 것이 용이하다.

(lambda x : x*2) (3)   
# 6

# 뒤쪽 소괄호 안에 인수 3을 넣으면, 람다 표현식이 바로 호출된다.
# 파이썬은 함수를 변수에 할당 가능하다.

my_func = lambda x, y : x + y
	my_func(1, 2)            
# 3

조건 표현식(Conditional Expression). inline if else

  • if else를 한 줄로 작성할 수 있는 방법
  • True일 때 값 if 조건식 else False일 때 값

먼저 if 조건식을 확인하고, True면 True일 때 값 호출, False면 False일 때 값 호출

zip()



map()

리스트의 모든 원소 조작 가능

  • map(lambda parameter1, parameter2, .. : expression, iterable1, iterable2, ..)
a = [_ for _ in range(1, 6)]
b = [_ for _ in range(2, 11, 2)]
print(list(map(lambda x, y : x*y, a, b)))
[2, 8, 18, 32, 50]
result = map(lambda x: ('성인' if x['age'] > 20 else '청소년'), people)
print(list(result))
# 나이를 확인하여 20 이상이면 성인을 호출, 이하면 청소년을 호출

일반 사용

# 인자의 타입 일괄 변경
list1 = ['1', '100', '33']
list4 = [[1], [1,1,1], [1,1]]
list2 = list(map(int, list1))     # [1, 100, 33]
list3 = list(map(len, list4))     # [1, 3, 2]

filter()

리스트의 모든 원소 중 특별한 것(True인 것)만 뽑기

  • filter(lambda parameter : expression, iterable)
    True일 때만 expression 반환식을 가져온다.
a = [3, 2, 8, 22, 10, 7, 0, 11, 9, 9]
list(filter(lambda x : x % 3 == 0 and 0 < x < 10, a))



유용한 내장 함수

형 변환 함수

  • int(), float(), str(), list(), tuple(), set()

bool 함수

  • bool()

숫자를 인자로 bool 함수 호출

  • 0 이외의 숫자 ⏩ True
  • 0 ⏩ False

문자열을 인자로 bool 함수 호출

  • 문자열 존재 ⏩ True
  • 빈 문자열 ⏩ False

리스트, 튜플, 세트를 인자로 bool 함수 호출

  • 항목 O ⏩ True
  • 항목 X ⏩ False
def print_name(name) :
	if bool(name) :
    	ptint("입력된 이름 :", name)
    else : 
    	print("입력된 이름이 없습니다.")

수학 관련 함수

내장 함수설명
min()최솟값 구하기
max()최댓값 구하기
abs()절댓값 구하기
sum()전체 합 구하기
len()항목 개수 구하기

그 외 함수

정렬 함수

sorted(list[, key=function, reverse=bool])

  • 오름차순 정렬
  • key : 정렬 기준 선택
  • reverse : 오름차순/내림차순 설정
list1 = [3, 8, 4]
list2 = [[2, ‘a’], [1, ‘b’], [8, ‘c’]]

# 2중 리스트 정렬
sorted(list2, key = lambda x: x[0])   # [[1, ‘b’], [2, ‘a’], [8, ‘c’]]

# 다중 조건 정렬
# key = lambda x: (x[0] , x[2])
# 내림차순은 - 기호 붙인다. (-x[0])
array = [("A", 18, 300000) , ("F", 24, 10000), ("T", 24, 200000),("Q",24,5000000), ("B", 70, 5000)]
sorted(array, key = lambda x: (x[0] , x[2]))




함수의 응용

문자열 합치기

.join 사용 시,

def solution(my_string, k):
    answer = ''.join(my_string * k)
    return answer
solution("abc", 3)
'abcabcabc'

print 사용 시,

def solution(my_string, k):
    answer = print(my_string * k)
    return answer
solution("abc", 3)
abcabcabc

튜플을 이용한 함수의 리턴값

튜플 리스트 활용

for a in enumerate(list):
    print('{}번째 값: {}'.format(a[0], a[1]))

for a in enumerate(list):
    print('{}번째 값: {}'.format(*a))
# *a : a의 내용을 쪼개라

튜플 딕셔너리 활용

for a in dict.items():
    print('{}의 나이는:{}'.format(a[0], a[1]))

for a in dict.items():
    print('{}의 나이는:{}'.format(*a)) 
profile
planning design development with data

0개의 댓글