[Python]

파이썬 - 함수

AI gina 2022. 5. 20. 14:06

함수란?

  • 지금까지 무심코 코드에서 사용된 많은 함수들이 존재 한다.
  • 예를들면, sum, len, range 같은 함수 등이 있다.
  • 함수란 우리가 알고있는 개념처럼 주어진 입력(input)에 대해서 의도된 출력(output)를 전달하는 역할을 한다.
  • python 내부에 이미 정의(구현)된 함수를 내장함수(built-in function)이라고 한다.

함수의 정의

def 함수명(매개변수):
    수행할문장들..
  • def 키워드 사용한다.
  • 매개변수함수에 입력으로 전달하는 값을 의미한다. parameter라고 한다.
  • : (콜론)
  • body (함수의 구현 부분, 함수 역시 코드 블록이기 때문에 들여쓰기 된 부분까지 함수의 코드블록으로 인지 함)
    • 함수를 호출한 코드 (caller)로 함수가 해당 기능을 수행하고 완료된 값(output)을 전달하기 위해 return 키워드 사용한다.
    • 즉, return 이후에 오는 값을 caller로 전달한다.
  • 함수의 네이밍 무척 중요하다.
    • 즉, 어떤 기능을 하는 함수인지 이름으로 최대한 나타날 수 있게 해야한다.
def my_add(value1, value2):
    result = value1+value2
    return result

result_value = my_add(2,4)
print(result_value)
6

함수의 사용(호출)

  • 함수명(argument1, argument2, ... argumentn)
  • 위와 같이 정의 된 함수의 이름전달되는 argument(인수)괄호안에 전달하여 함수를 호출
  • 함수가 호출되면 실행의 흐름이 호출자(caller)에서 함수(callee)로 변경 된다.
print(my_add(4,4))
8

parameter

  • 함수에 전달되는 입력(input)
  • 입력이 필요하지 않을 수도, 1개의 입력만 있을 수도, 여러개의 입력이 존재할 수 도 있다.
  • 파라미터로 int, string, float, boolm, list, dict 등등 어떤 파이썬 객체도 전달 가능하다.
  • 심지어, 함수도 함수의 파라미터로 전달 가능하다.
  • python의 경우, 타입 명시가 없기 때문에, 함수 생성 시, 의도된 파라미터의 타입에 맞게 입력을 전달하는 것이 중요하다.
  • 또한 파라미터를 전달 할 때, 정의된 순서에 따라 값을 전달하는 것이 중요하다.

 

Default parameter (기본 인자)

  • 함수의 파라미터에 기본값 지정 가능하다.
  • 파라미터를 명시하지 않을 경우, 지정된 기본값으로 대체한다.
  • 디폴트 파라미터 뒤에 일반 파라미터가 위치할 수 없다.
def test_add(x, y=10, z=5) :
    return x*y+z
test_add(10)
test_add(10,23)
test_add(1,32,5)
37
print('abc', end='bye~~')
abcbye~~
def print_num(a,b,c):
    print(a)
    print(b)
    print(c)

print_num(23,54,5)

list_a = [66,33,22]

print_num(*list_a)  # *표는 언패킹 적용해줌
23
54
5
66
33
22
def gugu_print(dan):
    print(dan, "단")
    for i in range(1,10):
        print(f'{dan}*{i}={dan*i}')
    print('---------')

gugu_print(3)
3 단
3*1=3
3*2=6
3*3=9
3*4=12
3*5=15
3*6=18
3*7=21
3*8=24
3*9=27
---------
a = list(range(1,10))

dan = 0
i = 0
def gugu_print(dan) :
    for dan in a :
         result = dan*i
    return result

gugu_print(3)
0

 

  • 기본 파라미터의 다른 예
    • print 함수
      • sep, end, file등 여러 기본 파라미터를 가짐
def test2(x,y,z):
    print('x:',x)
    print('y:',y)
    print('z:',z)
test2(3,4,5)
x: 3
y: 4
z: 5

keyword parameter (키워드 파라미터)

  • 파이썬의 경우, 파라미터에 값을 전달 할 때, 파라미터의 이름을 명시하여 전달 가능하다.
  • 파라미터 이름을 사용하지 않을 경우, 기본적으로 순서에 맞게 전달한다.
test2(y=20,x=10,z=8)
x: 10
y: 20
z: 8
def person_info(name,phone,address):
    print('이름:',name)
    print('전화번호:', phone)
    print('주소:', address)
    
person_info('kang','010-1111-1111','경기도 고양시')

person = {'name':'kang', 'phone':'010-1111-1111', 'address':'경기도 고양시'}

person_info(**person)  # ** 딕셔너리 언패킹
이름: kang
전화번호: 010-1111-1111
주소: 경기도 고양시
이름: kang
전화번호: 010-1111-1111
주소: 경기도 고양시

return (리턴)

  • 함수의 종료를 명시한다.
    • return 옆에 값이나 수식이 있다면 해당 값을 호출자(caller)에게 반환(전달)한다.
    • return 만 존재하면 None을 반환
    • return이 없는 경우, 함수 코드 블록이 종료되면 종료된다. 이때도 None을 반환한다.

 

multiple return (복수 값 반환)

  • tuple반환을 하여 복수개의 값 리턴 가능하다.

 

variable scope (변수의 범위)

  • 변수가 참조 가능한 코드상의 범위를 명시한다.
  • 함수내의 변수는 자신이 속한 코드 블록이 종료되면 소멸된다.
  • 이렇게 특정 코드 블록에서 선언된 변수를 지역변수(local variable) 라고한다.
  • 반대로 가장 상단에서 정의되어 프로그램 종료 전까지 유지되는 변수를 전역변수(global variable)라고한다.
  • 같은 이름의 지역변수와 전역변수가 존재할 경우, 지역변수의 우선순위가 더 높다.

 

variable length argument (가변길이 인자)

  • 함수에 전달되는 파라미터의 개수가 가변적일때 사용한다.
  • 예를들면 print 함수 format 함수를 생각해 볼 수 있다.
    • args : 파라미터를 튜플의 형태로 전달 (함수 선언시 매개변수 앞에 * 붙임)
    • kwargs : 파리미터를 딕셔너리 형태로 전달(네임드 파라미터) (함수 선언시 매개변수 앞에 ** 붙임)
    def 함수이름(*매개변수): 
        수행할 문장
    ...
    def 함수이름(**kwargs): 
        수행할 문장

keyword parameter (키워드 파라미터)

  • **가 붙은 경우에는 키워드 파라미터로 인식
  • 함수 호출 시, 파리미터의 이름과 값을 함께 전달 가능
def func2(**kwargs):
    for key, value in kwargs.items():
        print(key,value)
        
func2(a=1)
func2(test=1, test2=32)
func2(name='kang', age=20, phone='010-1111-1111')
a 1
test 1
test2 32
name kang
age 20
phone 010-1111-1111

 

위치 인수와 키워드 인수를 함께 사용하기

def my_func(*args,**kwargs):
    print(*args,**kwargs)
    
my_func(1,2,3,sep='\t',end='\tend')
1	2	3	end

 

연습문제

1.리스트를 입력받아서 리스트의 요소중 중복된 값은 삭제하고, 유일한 값만 유지하는 리스트를 반환하는 함수를 정의 하세요.


입력 예 [1,2,2,3,4,5,4]

출력 예 [1,2,3,4,5]

x = [1,2,2,3,4,5,4]

def no_dup(x):
        result = list(set(x)) 
        return result
no_dup(x)
[1, 2, 3, 4, 5]

  1. 문자열 두개를 인자로 전달받아 길이가 더 긴 문자열을 반환하는 함수를 정의하세요. 단, 두개의 길이가 같다면 첫번째 인자를 반환하세요.

입력 예 'test' 'python' 출력 예 'python'

입력 예 'java' 'test' 출력 예 'java'

def longer(a,b):
        if len(a) >= len(b) :
            return a
        else :
            return b
print(longer('python', 'test'))
print(longer('java', 'test'))
python
java
def max_find(*nums):
    return max(nums)

max_find(1,2,3,4,100,20)
100

 

value_list = input().split()
int_list=[]
for value in value_list:
    int_list.append(int(value))
    
print(int_list)

max_find(*int_list)
m_list = list(map(int, value_list))
print(m_list)
#map(함수, 반복가능한자료형)

max_find(*list(map(int,input().split())))

'[Python]' 카테고리의 다른 글

파이썬 - 파일 입출력  (0) 2022.05.23
파이썬 - lambda 함수  (0) 2022.05.21
파이썬 - 반복문(for)  (0) 2022.05.20
파이썬 - 반복문(while)  (0) 2022.05.20
파이썬 - 조건문 (if, elif, else)  (0) 2022.05.20