🀷🏼‍♀️ Etc.../- C, C++, Python, Android

Python ν•¨μˆ˜(Function)의 μ‚¬μš©λ²•κ³Ό λΆ„λ₯˜

Wonit 2019. 12. 7. 00:03

Function

ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ ν•¨μˆ˜λž€ νŠΉμ • κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” μ½”λ“œλ₯Ό μž¬μ‚¬μš© 및 λ³΄μˆ˜κ°€ κ°€λŠ₯ν•œ ν˜•νƒœμ˜ μ½”λ“œ λΈ”λŸ­μ΄λ‹€.

 

Pythonμ—μ„œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” def ν•¨μˆ˜λͺ…(λ§€κ°œλ³€μˆ˜):둜 선언을 ν•œ λ’€, λ“€μ—¬μ“°κΈ°λ₯Ό ν•œ ν•¨μˆ˜ λͺΈμ²΄λ₯Ό κ΅¬ν˜„ν•˜λ©΄ λœλ‹€.

 

μœ„μ˜ κ·Έλ¦Όκ³Ό 같이 inputκ³Ό output으둜 λ‚˜λˆ„λŠ”λ° μš°λ¦¬λŠ” μ•žμœΌλ‘œ input을 λ§€κ°œλ³€μˆ˜, output을 λ°˜ν™˜ κ°’, ν•¨μˆ˜ λͺΈμ²΄λ‘œ ν‘œν˜„ν•  것이닀.

 

ν•¨μˆ˜μ˜ λΆ„λ₯˜λŠ” λ‹€μŒκ³Ό 같은 4κ°€μ§€λ‘œ λ‚˜λˆŒ 수 μžˆλŠ”λ° λ‚˜λˆ„λŠ” 기쀀은 λ§€κ°œλ³€μˆ˜κ°€ μžˆλƒ 없냐, λ°˜ν™˜ 값이 μžˆλƒ μ—†λƒλ‘œ λ‚˜λ‰œλ‹€.

λ§€κ°œλ³€μˆ˜ (X) λ°˜ν™˜ κ°’ (X)

def intro():
    print('hello world')

intro()

 

λ§€κ°œλ³€μˆ˜ (O) λ°˜ν™˜ κ°’ (X)

def intro(arg):
    print(arg+"λ₯Ό μž…λ ₯ν•˜μ…¨μŠ΅λ‹ˆλ‹€.")


intro(input('숫자λ₯Ό μž…λ ₯ν•˜μ„Έμš” '))
>>>
1234λ₯Ό μž…λ ₯ν•˜μ…¨μŠ΅λ‹ˆλ‹€.

λ§€κ°œλ³€μˆ˜ (X) λ°˜ν™˜ κ°’ (O)

def intro():
    return 10
print(intro(), '이 좜λ ₯λ©λ‹ˆλ‹€')
>>>
10 이 좜λ ₯λ©λ‹ˆλ‹€.

λ§€κ°œλ³€μˆ˜ (O) λ°˜ν™˜ κ°’ (X)

list_t = []
def fill():
    list_t.append('filled')
fill()
fill()
fill()
fill()
print(list_t)
>>>
['filled', 'filled', 'filled', 'filled']
μœ„μ™€ 같이 λ°˜ν™˜ κ°’κ³Ό λ§€κ°œλ³€μˆ˜μ— 따라 ν•¨μˆ˜μ˜ κΈ°λŠ₯κ³Ό λͺ©μ μ΄ λ‹¬λΌμ§€λŠ”λ° μ΄λŠ” νŠΉμ • 숫자, λ¬Έμžμ—΄, μ‹œν€€μŠ€μ—λ§Œ μ μš©λ˜λŠ” 것이 μ•„λ‹ˆλΌ λ‹€λ°©λ©΄μœΌλ‘œ μ μš©λ˜λŠ”λ° μ°¨μ°¨ λ°°μ›Œκ°€λ©΄μ„œ 느끼면 λœλ‹€!!

 

μΈμžμ™€ λ§€κ°œλ³€μˆ˜μ˜ 차이점

 

ν”„λ‘œκ·Έλž˜λ°μ„ κ³΅λΆ€ν•˜λ‹€λ³΄λ©΄ λΉ„μŠ·ν•œ 단어가 계속 λ‚˜μ˜€κ³  κ·Έ 것듀이 우리λ₯Ό νž˜λ“€κ²Œ ν•œλ‹€... μ•ˆ κ·Έλž˜λ„ νž˜λ“  곡뢀에 그런 μž‘λ‹€ν•œκ²Œ νž˜λ“€κ²Œ ν•  수 μ—†μœΌλ‹ˆ 초μž₯λΆ€ν„° μ™„μ „νžˆ μ•Œκ³  λ„˜μ–΄κ°€μž.

 

  • 인자(argument)
    ν•¨μˆ˜λ‘œ μ „λ‹¬λ˜λŠ” κ°’

  • λ§€κ°œλ³€μˆ˜(parameter)
    ν•¨μˆ˜μ—μ„œ 인자둜 μ „λ‹¬λœ 값을 λ³΅μ‚¬ν•˜μ—¬ λ„£λŠ” λ³€μˆ˜

 

μœ„μΉ˜ μΈμžμ™€ ν‚€μ›Œλ“œ 인자

 

Python은 λ‹€λ₯Έ μ–Έμ–΄μ˜ ν•¨μˆ˜μ— λΉ„ν•΄ ꡉμž₯히 μœ μ—°ν•˜κ³ , λ…νŠΉν•˜κ²Œ μ²˜λ¦¬ν•œλ‹€.

 

μœ„μΉ˜ μΈμžλž€, μš°λ¦¬κ°€ 일반적으둜 μ•Œκ³  μžˆλŠ” ν•¨μˆ˜μ˜ νŠΉμ„±(μΈμžλŠ” λ“€μ–΄μ˜¨ μˆœμ„œμ— 따라 κ²°μ •λœλ‹€)κ³Ό κ°™λ‹€.

 

ν•˜μ§€λ§Œ ν‚€μ›Œλ“œ μΈμžλž€, λ§€κ°œλ³€μˆ˜μ— μƒμ‘ν•˜λŠ” 이름을 μΈμžμ— μ§€μ •ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

 

λ‹€μŒ 예λ₯Ό 보자.

 

μœ„μΉ˜ 인자
def add(a, b, c):
    sum = (a + b + c)
    return sum

print(add(1,2,3))

add의 인자둜 λ“€μ–΄κ°„ 1,2,3은 각각 a, b, c에 μˆœμ„œλŒ€λ‘œ ν• λ‹Ήλœλ‹€!

 

ν‚€μ›Œλ“œ 인자
def lunch(juice, dessert, main_dish):
    return {'main_dish': main_dish, 'juice':juice, 'dessert':dessert}

print(lunch('orange', 'ice Cream', 'steak'))
>>
{'main_dish': 'steak', 'juice': 'orange', 'dessert': 'ice Cream'}

 

이것이 μœ„μΉ˜μΈμžμ— κΈ°λ°˜ν•œ 정석인데 ν‚€μ›Œλ“œ 인자λ₯Ό μ‚¬μš©ν•˜λ©΄ μœ„μΉ˜ 인자의 법칙을 μœ„λ°°ν•΄μ„œ 인자둜 값을 λ„˜κΈΈ 수 μžˆλ‹€.

 

def lunch(juice, dessert, main_dish):
    return {'main_dish': main_dish, 'juice':juice, 'dessert':dessert}

print(lunch(dessert='ice Cream', juice='grape juice', main_dish='fish'))
>>
{'main_dish': 'fish', 'juice': 'grape juice', 'dessert': 'ice Cream'}

κΈ°λ³Έ λ§€κ°œλ³€μˆ˜κ°’ μ§€μ •ν•˜κΈ°

ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ λ§€κ°œλ³€μˆ˜κ°€ μ—†μœΌλ©΄ ν•¨μˆ˜ 호좜이 λΆˆκ°€λŠ₯ν•˜λ‹€. ν•˜μ§€λ§Œ Python은 κΈ°λ³Έ λ§€κ°œλ³€μˆ˜ κ°’μ΄λΌλŠ” κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.

 

def lunch(juice, dessert, main_dish = 'steak'):
    return {'main_dish': main_dish, 'juice':juice, 'dessert':dessert}

print(lunch('orange', 'ice Cream'))
>>>
{'main_dish': 'steak', 'juice': 'orange', 'dessert': 'ice Cream'}

μ›λž˜ lunch()λŠ” λ§€κ°œλ³€μˆ˜λ₯Ό 3개λ₯Ό λ°›μ•„μ•Ό ν•˜μ§€λ§Œ print(lunch())μ—μ„œ λ§€κ°œλ³€μˆ˜λ₯Ό 2개만 μ£ΌλŠ” 상황이 λ˜μ—ˆλ‹€.

 

κ·Έλ ‡μ§€λ§Œ 첫 번째 def lunch(juice, dessert, main_dish = 'steak') λ•Œλ¬Έμ— λ§€κ°œλ³€μˆ˜μ˜ κ°―μˆ˜κ°€ λ§žμ§€ μ•Šμ•„λ„ 정상 싀행이 κ°€λŠ₯ν•˜λ‹€.

ν•˜μ§€λ§Œ μ£Όμ˜ν•΄μ•Όν•  점이 μžˆλŠ”λ°, κΈ°λ³Έ μΈμžκ°’μ€ ν•¨μˆ˜κ°€ 호좜될 λ•Œ κ³„μ‚°λ˜λŠ” 것이 μ•„λ‹ˆλΌ μ •μ˜λ  λ•Œ κ³„μ‚°λœλ‹€.
κ·Έλž˜μ„œ λ³€κ²½ λΆˆκ°€λŠ₯ν•œ νŠœν”Œ νƒ€μž…μ˜ μ‹œν€€μŠ€λ§Œ κΈ°λ³Έ 인자둜써 μ‚¬μš©κ°€λŠ₯ν•˜λ‹€.

μœ„μΉ˜ 인자 λͺ¨μœΌκΈ° : *

ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜μ— *을 μ‚¬μš©ν•œλ‹€λ©΄, λ§€κ°œλ³€μˆ˜μ—μ„œ μœ„μΉ˜ν•œ 인자 λ³€μˆ˜λ“€μ„ νŠœν”Œλ‘œ λ¬ΆλŠ”λ‹€.

μ‚¬μš©λ²•μ€ μ•„λž˜μ™€ 같이 λ§€κ°œλ³€μˆ˜ μ•žμ—*λ₯Ό λΆ™ν˜€μ€€λ‹€.

def print_args(*some):
    print('Some tuple in : ', some)

print(print_args('efg','abc'))
>>>
Some tuple in :  ('asdf', 'asdf')

μ΄λ ‡κ²Œ λœλ‹€λ©΄ λ§€κ°œλ³€μˆ˜κ°€ λͺ‡ κ°œκ°€ 였던 ν•˜λ‚˜μ˜ νŠœν”Œ μ•ˆμ— μ €μž₯되게 되며 λ§€κ°œλ³€μˆ˜μ˜ μœ μ—°μ„±μ„ μ œκ³΅ν•œλ‹€.

 

κ·Έλ ‡λ‹€λ©΄ μ—¬λŸ¬ 맀개 λ³€μˆ˜λ₯Ό 의무적으둜 λ°›κ³  좔가적인 λ§€κ°œλ³€μˆ˜λ₯Ό 받을 λ•ŒλŠ”? λ‹€μŒκ³Ό κ°™λ‹€.

 

def print_args(var1, var2, *other_var):
    print('var1: ', var1, ' var2: ', var2)
    print('other var is : ', other_var)

print(print_args('efg','abc', 'var3', 'kim', 'temp'))
>>>
var1:  efg  var2:  abc
other var is :  ('var3', 'kim', 'temp')

이런 μ‹μœΌλ‘œ *κ°€ 뢙은 λ§€κ°œλ³€μˆ˜λ‘œ λ“€μ–΄μ˜¨ 인자 값듀은 λͺ¨λ‘ ν•œ νŠœν”Œμ— μ €μž₯λœλ‹€.

λ§€κ°œλ³€μˆ˜ 3κ°€μ§€ 방식에 λŒ€ν•΄ μ •λ¦¬ν•˜μžλ©΄

 


ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜ 3κ°€μ§€ 방식

  1. func1(v1, v2, v3) : λ§€κ°œλ³€μˆ˜λ₯Ό μ§€μ •ν•΄μ£Όκ³  전달
  2. func2(*args) : λ§€κ°œλ³€μˆ˜λ₯Ό μ§€μ •ν•˜μ§€ μ•Šκ³  전달.
  3. func3(**kwargs) :

func1(v1, v2, v3)

μœ„μΉ˜ 인자 지정이라고 함(값을 λ§€κ°œλ³€μˆ˜μ— μƒμ‘ν•˜λŠ” λ³€μˆ˜μ— 볡사)
기본적으둜 λ‹€λ₯Έ μ–Έμ–΄μ™€μ˜ ν•¨μˆ˜(λ©”μ„œλ“œ)의 μ‚¬μš©λ²•κ³Ό λΉ„μŠ·ν•¨
μžλ£Œν˜•μ΄ μ—†λŠ” python의 νŠΉμ§•μœΌλ‘œ λ³€μˆ˜ μ΄λ¦„λ§Œ μ£Όλ©΄ 됨.

μΆ”κ°€μ μœΌλ‘œ func1(v1, v2, v3 = 0) μ΄λŸ°μ‹μœΌλ‘œ μ„ μ–Έν•  λ•Œ v3λ₯Ό μ΄ˆκΈ°ν™” ν•  수 있음

func2(*args)

μœ„μΉ˜ 인자 λͺ¨μœΌκΈ°λΌκ³  함
λ§€κ°œλ³€μˆ˜μ˜ 개수λ₯Ό μ§€μ •ν•˜μ§€ μ•Šκ³  μ „λ‹¬ν•˜λŠ” 방식

  • *args ν˜•νƒœλ‘œ μ „λ‹¬λœ λ§€κ°œλ³€μˆ˜λŠ” νŠœν”Œ ν˜•μ‹μœΌλ‘œ 전달.
  • μ •ν•΄μ§€μ§€ μ•Šμ€ λ‹€μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λ₯Ό νŠœν”Œ ν˜•μ‹μœΌλ‘œ 받을 수 있음

func3(**kwargs)

ν‚€μ›Œλ“œ 인자 λͺ¨μœΌκΈ°λΌκ³  함
ν•¨μˆ˜ ν˜ΈμΆœμ„ ν•  λ•Œ λ”•μ…”λ„ˆλ¦¬ ν˜•μ‹μœΌλ‘œ λ§€κ°œλ³€μˆ˜λ₯Ό 전달함

  • key-value ν˜•νƒœλ‘œ μ‚¬μš©